git-touch-android-ios-app/lib/widgets/repo_item.dart

98 lines
3.3 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
2019-02-04 14:38:29 +01:00
import 'package:flutter/cupertino.dart';
2019-08-31 16:17:35 +02:00
import 'package:primer/primer.dart';
import '../utils/utils.dart';
import '../screens/repo.dart';
import 'link.dart';
class RepoItem extends StatelessWidget {
2019-03-02 11:17:46 +01:00
final Map<String, dynamic> payload;
final bool showOwner;
final bool isLink;
RepoItem(this.payload, {this.showOwner = true, this.isLink = true});
2019-02-04 11:32:39 +01:00
IconData _buildIconData() {
2019-03-02 11:17:46 +01:00
if (payload['isPrivate']) {
2019-02-04 11:32:39 +01:00
return Octicons.lock;
}
2019-03-02 11:17:46 +01:00
if (payload['isFork']) {
2019-02-04 11:32:39 +01:00
return Octicons.repo_forked;
}
return Octicons.repo;
}
@override
Widget build(BuildContext context) {
var widget = Padding(
padding: EdgeInsets.all(10),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
(showOwner ? (payload['owner']['login'] + '/') : '') +
payload['name'],
2019-08-31 16:17:35 +02:00
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16),
),
2019-05-12 09:14:28 +02:00
SizedBox(height: 6),
2019-08-31 16:17:35 +02:00
Text(
payload['description'] ?? 'No description provided yet',
style: TextStyle(color: PrimerColors.gray600, fontSize: 14),
),
2019-05-12 09:14:28 +02:00
SizedBox(height: 6),
DefaultTextStyle(
2019-08-31 16:17:35 +02:00
style: TextStyle(color: PrimerColors.gray600, fontSize: 13),
child: Row(
children: <Widget>[
2019-08-31 16:17:35 +02:00
Icon(Octicons.star,
size: 14, color: PrimerColors.gray600),
Text(payload['stargazers']['totalCount'].toString()),
2019-08-31 16:17:35 +02:00
SizedBox(width: 16),
Icon(Octicons.repo_forked,
2019-08-31 16:17:35 +02:00
size: 14, color: PrimerColors.gray600),
Text(payload['forks']['totalCount'].toString()),
2019-08-31 16:17:35 +02:00
SizedBox(width: 16),
payload['primaryLanguage'] == null
? Container()
: Row(children: <Widget>[
Container(
width: 10,
height: 10,
decoration: BoxDecoration(
color: convertColor(
payload['primaryLanguage']['color']),
shape: BoxShape.circle,
),
),
Padding(padding: EdgeInsets.only(left: 4)),
Text(payload['primaryLanguage']['name']),
]),
],
),
)
],
2019-02-04 11:32:39 +01:00
),
),
Padding(padding: EdgeInsets.only(left: 4)),
Icon(_buildIconData(), size: 20, color: Colors.black54),
],
),
);
if (isLink) {
// TODO: text style
return Link(
screenBuilder: (_) =>
RepoScreen(payload['owner']['login'], payload['name']),
child: widget,
);
} else {
return widget;
}
}
}