feat: repo item style

This commit is contained in:
Rongjian Zhang
2019-09-08 21:20:12 +08:00
parent 814b255f3a
commit 354520d9c1
4 changed files with 77 additions and 46 deletions

View File

@@ -35,6 +35,7 @@ class RepoScreen extends StatelessWidget {
__typename __typename
login login
url url
avatarUrl
} }
name name
isPrivate isPrivate

View File

@@ -1,5 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:git_touch/utils/utils.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import '../scaffolds/refresh.dart'; import '../scaffolds/refresh.dart';
import '../widgets/repo_item.dart'; import '../widgets/repo_item.dart';
@@ -16,9 +17,7 @@ class _TrendingScreenState extends State<TrendingScreen> {
return items.map((item) { return items.map((item) {
return { return {
'owner': { 'owner': {'login': item['author'], 'avatarUrl': item['avatar']},
'login': item['author'],
},
'name': item['name'], 'name': item['name'],
'description': item['description'], 'description': item['description'],
'stargazers': { 'stargazers': {
@@ -46,13 +45,11 @@ class _TrendingScreenState extends State<TrendingScreen> {
onRefresh: _fetchTrendingRepos, onRefresh: _fetchTrendingRepos,
bodyBuilder: (payload) { bodyBuilder: (payload) {
return Column( return Column(
children: payload.map<Widget>((repo) { crossAxisAlignment: CrossAxisAlignment.stretch,
return Container( children: join(
decoration: BoxDecoration( BorderView(),
border: Border(bottom: BorderSide(color: Colors.black12))), payload.map<Widget>((item) => RepoItem(item)).toList(),
child: RepoItem(repo), ),
);
}).toList(),
); );
}, },
); );

View File

@@ -75,6 +75,7 @@ var warningSpan =
var repoChunk = ''' var repoChunk = '''
owner { owner {
login login
avatarUrl
} }
name name
description description

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:git_touch/widgets/avatar.dart';
import 'package:primer/primer.dart'; import 'package:primer/primer.dart';
import '../utils/utils.dart'; import '../utils/utils.dart';
import '../screens/repo.dart'; import '../screens/repo.dart';
@@ -29,56 +30,87 @@ class RepoItem extends StatelessWidget {
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Avatar(url: payload['owner']['avatarUrl'], size: 12),
SizedBox(width: 8),
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: join(SizedBox(height: 8), <Widget>[
Text( Text(
(showOwner ? (payload['owner']['login'] + '/') : '') + (showOwner ? (payload['owner']['login'] + ' / ') : '') +
payload['name'], payload['name'],
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16), style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16,
color: PrimerColors.blue500,
),
), ),
SizedBox(height: 6), payload['description'] == null ||
Text( (payload['description'] as String).isEmpty
payload['description'] ?? 'No description provided yet', ? null
style: TextStyle(color: PrimerColors.gray600, fontSize: 14), : Text(
), payload['description'],
SizedBox(height: 6), style: TextStyle(
color: PrimerColors.gray600, fontSize: 14),
),
DefaultTextStyle( DefaultTextStyle(
style: TextStyle(color: PrimerColors.gray600, fontSize: 13), style: TextStyle(
color: PrimerColors.gray600,
fontSize: 13,
fontWeight: FontWeight.w500,
),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
Icon(Octicons.star, SizedBox(
size: 14, color: PrimerColors.gray600), width: 100,
Text(payload['stargazers']['totalCount'].toString()), child: Row(children: <Widget>[
SizedBox(width: 16), Container(
Icon(Octicons.repo_forked, width: 10,
size: 14, color: PrimerColors.gray600), height: 10,
Text(payload['forks']['totalCount'].toString()), decoration: BoxDecoration(
SizedBox(width: 16), color: convertColor(
payload['primaryLanguage'] == null payload['primaryLanguage'] == null
? Container() ? null
: Row(children: <Widget>[ : payload['primaryLanguage']['color']),
Container( shape: BoxShape.circle,
width: 10, ),
height: 10, ),
decoration: BoxDecoration( SizedBox(width: 4),
color: convertColor( Text(payload['primaryLanguage'] == null
payload['primaryLanguage']['color']), ? 'Unknown'
shape: BoxShape.circle, : payload['primaryLanguage']['name']),
), ]),
), ),
Padding(padding: EdgeInsets.only(left: 4)), SizedBox(
Text(payload['primaryLanguage']['name']), width: 100,
]), child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Icon(Octicons.star,
size: 14, color: PrimerColors.gray600),
Text(
payload['stargazers']['totalCount'].toString()),
],
),
),
SizedBox(
width: 100,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Icon(Octicons.repo_forked,
size: 14, color: PrimerColors.gray600),
Text(payload['forks']['totalCount'].toString())
],
),
),
], ],
), ),
) )
], ]),
), ),
), ),
Padding(padding: EdgeInsets.only(left: 4)), Icon(_buildIconData(), size: 18, color: PrimerColors.gray600),
Icon(_buildIconData(), size: 20, color: Colors.black54),
], ],
), ),
); );