From 9ae00dff6d591cf20e76cebe4892d78dedacfc30 Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Tue, 29 Jan 2019 13:34:52 +0800 Subject: [PATCH] feat: add more event type --- lib/main.dart | 6 +- lib/screens/pull_request.dart | 10 --- lib/utils/utils.dart | 57 ++++++++++++++++- lib/widgets/issue_pull_request.dart | 2 +- lib/widgets/timeline_item.dart | 95 +++++++++++++++++++++++++---- 5 files changed, 142 insertions(+), 28 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 20c23d0..08fcd4d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:git_flux/providers/event.dart'; -import 'package:git_flux/providers/notification.dart'; -import 'package:git_flux/providers/search.dart'; +import 'package:git_flux/providers/providers.dart'; import 'package:git_flux/ios/main.dart'; +import 'package:git_flux/screens/screens.dart'; class App extends StatelessWidget { final isIos = true; @@ -25,6 +24,7 @@ class App extends StatelessWidget { home: DefaultTextStyle( style: TextStyle(color: Color(0xff24292e)), child: IosHomePage(title: 'GitFlux'), + // child: IssueScreen(11609, 'flutter', 'flutter'), ), // theme: ThemeData( // textTheme: TextTheme( diff --git a/lib/screens/pull_request.dart b/lib/screens/pull_request.dart index dff07f1..89720e4 100644 --- a/lib/screens/pull_request.dart +++ b/lib/screens/pull_request.dart @@ -41,16 +41,6 @@ Future queryPullRequest(int id, String owner, String name) async { login } } - ... on LabeledEvent { - createdAt - label { - name - url - } - actor { - login - } - } ... on MergedEvent { createdAt mergeRefName diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index e5a06aa..1ebab5f 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -111,8 +111,63 @@ __typename } } } + + + ... on LabeledEvent { + createdAt + actor { + login + } + label { + name + color + } + } + + ... on UnlabeledEvent { + createdAt + actor { + login + } + label { + name + color + } + } + + ... on MilestonedEvent { + createdAt + actor { + login + } + milestoneTitle + } + + ... on LockedEvent { + createdAt + actor { + login + } + lockReason + } + ... on UnlockedEvent { + createdAt + actor { + login + } + } + ... on AssignedEvent { + createdAt + actor { + login + } + user { + login + } + } '''; -var warning = Text('xxx', style: TextStyle(color: Colors.redAccent)); +var createWarning = + (String text) => Text(text, style: TextStyle(color: Colors.redAccent)); var warningSpan = TextSpan(text: 'xxx', style: TextStyle(color: Colors.redAccent)); diff --git a/lib/widgets/issue_pull_request.dart b/lib/widgets/issue_pull_request.dart index b8f1843..4a1a0e2 100644 --- a/lib/widgets/issue_pull_request.dart +++ b/lib/widgets/issue_pull_request.dart @@ -57,7 +57,7 @@ class _IssuePullRequestScreenState extends State { fontWeight: FontWeight.bold, height: 1.2, )), - CommentItem(payload), + // CommentItem(payload), // ListView.builder( // shrinkWrap: true, // itemCount: comments.length, diff --git a/lib/widgets/timeline_item.dart b/lib/widgets/timeline_item.dart index 9364e82..9aafbda 100644 --- a/lib/widgets/timeline_item.dart +++ b/lib/widgets/timeline_item.dart @@ -1,3 +1,4 @@ +import 'dart:core'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:git_flux/utils/utils.dart'; @@ -44,10 +45,28 @@ class TimelineItem extends StatelessWidget { ); } + TextSpan _buildLabel(item) { + var textColor = item['label']['color'] == 'fbca04' ? null : Colors.white; + + return TextSpan( + text: item['label']['name'], + style: TextStyle( + color: textColor, + // https://github.com/flutter/flutter/issues/20430 + background: Paint() + ..color = Color(int.parse('ff' + item['label']['color'], radix: 16)) + // https://stackoverflow.com/a/52592679 + // ..strokeWidth = 16.5 + // ..style = PaintingStyle.stroke + ), + ); + } + Widget _buildByType(BuildContext context) { switch (item['__typename']) { case 'IssueComment': - return CommentItem(item); + return Text('comment'); + // return CommentItem(item); case 'ReferencedEvent': // TODO: isCrossRepository if (item['commit'] == null) { @@ -104,6 +123,67 @@ class TimelineItem extends StatelessWidget { item['source']['number'].toString()), item: item, ); + case 'LabeledEvent': + return _buildItem( + actor: item['actor']['login'], + iconData: Octicons.tag, + textSpan: TextSpan(children: [ + TextSpan(text: ' added '), + _buildLabel(item), + TextSpan(text: ' label'), + ]), + item: item, + ); + case 'UnlabeledEvent': + return _buildItem( + actor: item['actor']['login'], + iconData: Octicons.tag, + textSpan: TextSpan(children: [ + TextSpan(text: ' removed '), + _buildLabel(item), + TextSpan(text: ' label'), + ]), + item: item, + ); + case 'MilestonedEvent': + return _buildItem( + actor: item['actor']['login'], + iconData: Octicons.milestone, + textSpan: TextSpan(children: [ + TextSpan(text: ' added this to '), + TextSpan(text: item['milestoneTitle']), + TextSpan(text: ' milestone'), + ]), + item: item, + ); + case 'LockedEvent': + return _buildItem( + actor: item['actor']['login'], + iconData: Octicons.lock, + textSpan: TextSpan(children: [ + TextSpan(text: ' locked this conversation '), + ]), + item: item, + ); + case 'UnlockedEvent': + return _buildItem( + actor: item['actor']['login'], + iconData: Octicons.key, + textSpan: TextSpan(children: [ + TextSpan(text: ' unlocked this conversation '), + ]), + item: item, + ); + case 'AssignedEvent': + return _buildItem( + actor: item['actor']['login'], + iconData: Octicons.key, + textSpan: TextSpan(children: [ + TextSpan(text: ' assigned this to '), + TextSpan(text: item['user']['login']) + ]), + item: item, + ); // case 'ReviewRequestedEvent': @@ -124,17 +204,6 @@ class TimelineItem extends StatelessWidget { textSpan: _buildReviewText(context, item), item: item, ); - case 'LabeledEvent': - return _buildItem( - actor: item['actor']['login'], - iconData: Octicons.tag, - textSpan: TextSpan(children: [ - TextSpan(text: ' added the '), - TextSpan(text: item['label']['name']), - TextSpan(text: 'label'), - ]), - item: item, - ); case 'MergedEvent': return _buildItem( actor: item['actor']['login'], @@ -170,7 +239,7 @@ class TimelineItem extends StatelessWidget { item: item, ); default: - return warning; + return createWarning(item['__typename']); } }