@@ -2,6 +2,9 @@ import 'dart:convert';
2
2
import 'package:flutter/material.dart' ;
3
3
import 'package:flutter/cupertino.dart' ;
4
4
import 'package:git_touch/models/settings.dart' ;
5
+ import 'package:git_touch/utils/utils.dart' ;
6
+ import 'package:git_touch/widgets/table_view.dart' ;
7
+ import 'package:primer/primer.dart' ;
5
8
import 'package:provider/provider.dart' ;
6
9
import 'package:flutter_markdown/flutter_markdown.dart' ;
7
10
import 'package:git_touch/models/theme.dart' ;
@@ -21,6 +24,8 @@ class RepoScreen extends StatelessWidget {
21
24
final String owner;
22
25
final String name;
23
26
27
+ static const _languageBarPadding = 10.0 ;
28
+
24
29
RepoScreen (this .owner, this .name);
25
30
RepoScreen .fromFullName (String fullName)
26
31
: owner = fullName.split ('/' )[0 ],
@@ -50,13 +55,23 @@ class RepoScreen extends StatelessWidget {
50
55
primaryLanguage {
51
56
color
52
57
name
53
- }
58
+ }
54
59
issues(states: OPEN) {
55
60
totalCount
56
61
}
57
62
pullRequests(states: OPEN) {
58
63
totalCount
59
64
}
65
+ languages(first: 10, orderBy: {field: SIZE, direction: DESC}) {
66
+ totalSize
67
+ edges {
68
+ size
69
+ node {
70
+ name
71
+ color
72
+ }
73
+ }
74
+ }
60
75
url
61
76
defaultBranchRef {
62
77
name
@@ -158,44 +173,73 @@ class RepoScreen extends StatelessWidget {
158
173
var payload = data[0 ];
159
174
var readme = data[1 ];
160
175
176
+ final langWidth =
177
+ MediaQuery .of (context).size.width - _languageBarPadding * 2 ;
178
+
161
179
return Column (
180
+ crossAxisAlignment: CrossAxisAlignment .stretch,
162
181
children: < Widget > [
163
182
RepoItem (payload, isLink: false ),
164
- Container (
165
- decoration: BoxDecoration (
166
- border: Border (
167
- bottom: BorderSide (color: Colors .black12),
168
- top: BorderSide (color: Colors .black12),
183
+ BorderView (),
184
+ Row (
185
+ children: < Widget > [
186
+ EntryItem (
187
+ count: payload['issues' ]['totalCount' ],
188
+ text: 'Issues' ,
189
+ screenBuilder: (context) =>
190
+ IssuesScreen (owner: owner, name: name),
191
+ ),
192
+ EntryItem (
193
+ count: payload['pullRequests' ]['totalCount' ],
194
+ text: 'Pull Requests' ,
195
+ screenBuilder: (context) => IssuesScreen (
196
+ owner: owner, name: name, isPullRequest: true ),
197
+ ),
198
+ EntryItem (
199
+ count: payload['defaultBranchRef' ]['target' ]['history' ]
200
+ ['totalCount' ],
201
+ text: 'Commits' ,
202
+ screenBuilder: (context) => CommitsScreen (owner, name),
203
+ ),
204
+ ],
205
+ ),
206
+ BorderView (height: 10 ),
207
+ Padding (
208
+ padding: const EdgeInsets .all (_languageBarPadding),
209
+ child: ClipRRect (
210
+ borderRadius: BorderRadius .circular (4 ),
211
+ child: Container (
212
+ height: 10 ,
213
+ child: Row (
214
+ children: (payload['languages' ]['edges' ] as List )
215
+ .map ((lang) => Container (
216
+ color: convertColor (lang['node' ]['color' ]),
217
+ width: langWidth *
218
+ lang['size' ] /
219
+ payload['languages' ]['totalSize' ]))
220
+ .toList ()),
169
221
),
170
- ),
171
- child: Row (
172
- children: < Widget > [
173
- EntryItem (
174
- count: payload['issues' ]['totalCount' ],
175
- text: 'Issues' ,
176
- screenBuilder: (context) =>
177
- IssuesScreen (owner: owner, name: name),
178
- ),
179
- EntryItem (
180
- count: payload['pullRequests' ]['totalCount' ],
181
- text: 'Pull Requests' ,
182
- screenBuilder: (context) => IssuesScreen (
183
- owner: owner, name: name, isPullRequest: true ),
184
- ),
185
- EntryItem (
186
- text: 'Files' ,
187
- screenBuilder: (context) =>
188
- ObjectScreen (owner: owner, name: name),
189
- ),
190
- EntryItem (
191
- count: payload['defaultBranchRef' ]['target' ]['history' ]
192
- ['totalCount' ],
193
- text: 'Commits' ,
194
- screenBuilder: (context) => CommitsScreen (owner, name),
195
- ),
196
- ],
197
222
),
198
223
),
224
+ TableView (items: [
225
+ TableViewItem (
226
+ leftWidget: Icon (Octicons .code,
227
+ size: 20 ,
228
+ color: convertColor (payload['primaryLanguage' ] == null
229
+ ? null
230
+ : payload['primaryLanguage' ]['color' ])),
231
+ text: Text (payload['primaryLanguage' ] == null
232
+ ? 'Unknown'
233
+ : payload['primaryLanguage' ]['name' ]),
234
+ rightWidget: Icon (
235
+ CupertinoIcons .right_chevron,
236
+ size: 18 ,
237
+ color: PrimerColors .gray300,
238
+ ),
239
+ screenBuilder: (_) => ObjectScreen (owner: owner, name: name),
240
+ )
241
+ ]),
242
+ BorderView (height: 10 ),
199
243
Container (
200
244
padding: EdgeInsets .all (16 ),
201
245
child: MarkdownBody (data: readme),
0 commit comments