From 8097eb3bb4be0d8c1c031e8c8930804b6f9542d2 Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Thu, 12 Dec 2019 14:02:48 +0800 Subject: [PATCH] improvement: event item more actions --- lib/models/{github_event.dart => github.dart} | 20 +++++++++- .../{github_event.g.dart => github.g.dart} | 28 ++++++++++++- lib/models/github_trending.dart | 21 ---------- lib/models/github_trending.g.dart | 33 --------------- lib/models/theme.dart | 1 + lib/screens/news.dart | 2 +- lib/screens/trending.dart | 2 +- lib/widgets/action_button.dart | 2 +- lib/widgets/event_item.dart | 40 ++++++++++--------- 9 files changed, 72 insertions(+), 77 deletions(-) rename lib/models/{github_event.dart => github.dart} (76%) rename lib/models/{github_event.g.dart => github.g.dart} (62%) delete mode 100644 lib/models/github_trending.dart delete mode 100644 lib/models/github_trending.g.dart diff --git a/lib/models/github_event.dart b/lib/models/github.dart similarity index 76% rename from lib/models/github_event.dart rename to lib/models/github.dart index 9a0b111..995a8e8 100644 --- a/lib/models/github_event.dart +++ b/lib/models/github.dart @@ -2,7 +2,7 @@ import 'package:git_touch/utils/utils.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:tuple/tuple.dart'; -part 'github_event.g.dart'; +part 'github.g.dart'; @JsonSerializable(fieldRename: FieldRename.snake) class GithubEvent { @@ -53,3 +53,21 @@ class GithubEventRepo { factory GithubEventRepo.fromJson(Map json) => _$GithubEventRepoFromJson(json); } + +@JsonSerializable() +class GithubTrendingItem { + String author; + String name; + String avatar; + String description; + String language; + String languageColor; + int stars; + int forks; + int currentPeriodStars; + + GithubTrendingItem(); + + factory GithubTrendingItem.fromJson(Map json) => + _$GithubTrendingItemFromJson(json); +} diff --git a/lib/models/github_event.g.dart b/lib/models/github.g.dart similarity index 62% rename from lib/models/github_event.g.dart rename to lib/models/github.g.dart index 596ede7..e8f511e 100644 --- a/lib/models/github_event.g.dart +++ b/lib/models/github.g.dart @@ -1,6 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'github_event.dart'; +part of 'github.dart'; // ************************************************************************** // JsonSerializableGenerator @@ -48,3 +48,29 @@ Map _$GithubEventRepoToJson(GithubEventRepo instance) => { 'name': instance.name, }; + +GithubTrendingItem _$GithubTrendingItemFromJson(Map json) { + return GithubTrendingItem() + ..author = json['author'] as String + ..name = json['name'] as String + ..avatar = json['avatar'] as String + ..description = json['description'] as String + ..language = json['language'] as String + ..languageColor = json['languageColor'] as String + ..stars = json['stars'] as int + ..forks = json['forks'] as int + ..currentPeriodStars = json['currentPeriodStars'] as int; +} + +Map _$GithubTrendingItemToJson(GithubTrendingItem instance) => + { + 'author': instance.author, + 'name': instance.name, + 'avatar': instance.avatar, + 'description': instance.description, + 'language': instance.language, + 'languageColor': instance.languageColor, + 'stars': instance.stars, + 'forks': instance.forks, + 'currentPeriodStars': instance.currentPeriodStars, + }; diff --git a/lib/models/github_trending.dart b/lib/models/github_trending.dart deleted file mode 100644 index 87a078c..0000000 --- a/lib/models/github_trending.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -part 'github_trending.g.dart'; - -@JsonSerializable() -class GithubTrendingItem { - String author; - String name; - String avatar; - String description; - String language; - String languageColor; - int stars; - int forks; - int currentPeriodStars; - - GithubTrendingItem(); - - factory GithubTrendingItem.fromJson(Map json) => - _$GithubTrendingItemFromJson(json); -} diff --git a/lib/models/github_trending.g.dart b/lib/models/github_trending.g.dart deleted file mode 100644 index 531b157..0000000 --- a/lib/models/github_trending.g.dart +++ /dev/null @@ -1,33 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'github_trending.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -GithubTrendingItem _$GithubTrendingItemFromJson(Map json) { - return GithubTrendingItem() - ..author = json['author'] as String - ..name = json['name'] as String - ..avatar = json['avatar'] as String - ..description = json['description'] as String - ..language = json['language'] as String - ..languageColor = json['languageColor'] as String - ..stars = json['stars'] as int - ..forks = json['forks'] as int - ..currentPeriodStars = json['currentPeriodStars'] as int; -} - -Map _$GithubTrendingItemToJson(GithubTrendingItem instance) => - { - 'author': instance.author, - 'name': instance.name, - 'avatar': instance.avatar, - 'description': instance.description, - 'language': instance.language, - 'languageColor': instance.languageColor, - 'stars': instance.stars, - 'forks': instance.forks, - 'currentPeriodStars': instance.currentPeriodStars, - }; diff --git a/lib/models/theme.dart b/lib/models/theme.dart index c574eb1..eaaac7e 100644 --- a/lib/models/theme.dart +++ b/lib/models/theme.dart @@ -346,6 +346,7 @@ class ThemeModel with ChangeNotifier { } showActions(BuildContext context, List actionItems) async { + if (actionItems == null) return; final value = await showCupertinoModalPopup( context: context, builder: (BuildContext context) { diff --git a/lib/screens/news.dart b/lib/screens/news.dart index f6a2700..614f2a2 100644 --- a/lib/screens/news.dart +++ b/lib/screens/news.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:git_touch/models/github_event.dart'; +import 'package:git_touch/models/github.dart'; import 'package:git_touch/models/notification.dart'; import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/list_stateful.dart'; diff --git a/lib/screens/trending.dart b/lib/screens/trending.dart index 272c9fe..4ffe6bb 100644 --- a/lib/screens/trending.dart +++ b/lib/screens/trending.dart @@ -1,6 +1,6 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:git_touch/models/github_trending.dart'; +import 'package:git_touch/models/github.dart'; import 'package:git_touch/scaffolds/tab_stateful.dart'; import 'package:git_touch/screens/repository.dart'; import 'package:git_touch/utils/utils.dart'; diff --git a/lib/widgets/action_button.dart b/lib/widgets/action_button.dart index 072bf7d..9482365 100644 --- a/lib/widgets/action_button.dart +++ b/lib/widgets/action_button.dart @@ -43,7 +43,7 @@ class ActionItem { }); ActionItem.issue(String owner, String name, int number, {isPullRequest = false}) - : text = (isPullRequest ? 'Pull Request' : 'Issue') + ' #$number', + : text = '$owner/$name #$number', onPress = ((context) { Provider.of(context).pushRoute( context, diff --git a/lib/widgets/event_item.dart b/lib/widgets/event_item.dart index 32e8073..3c21b56 100644 --- a/lib/widgets/event_item.dart +++ b/lib/widgets/event_item.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:git_touch/models/github_event.dart'; +import 'package:git_touch/models/github.dart'; import 'package:git_touch/models/theme.dart'; import 'package:git_touch/screens/repository.dart'; import 'package:git_touch/widgets/action_button.dart'; @@ -57,12 +57,6 @@ class EventItem extends StatelessWidget { return Link( screenBuilder: screenBuilder, url: url, - onLongPress: () async { - if (actionItems == null) return; - - await Provider.of(context) - .showActions(context, actionItems); - }, child: Container( padding: CommonStyle.padding, child: Column( @@ -109,7 +103,14 @@ class EventItem extends StatelessWidget { style: TextStyle( fontSize: 13, color: theme.palette.tertiaryText, - )) + )), + Expanded(child: Container()), + GestureDetector( + child: Icon(Icons.more_horiz), + onTap: () { + theme.showActions(context, actionItems); + }, + ), ], ), ]), @@ -123,11 +124,9 @@ class EventItem extends StatelessWidget { ); } - @override - build(BuildContext context) { + Widget _buildDefaultItem(BuildContext context) { final theme = Provider.of(context); - - var defaultItem = _buildItem( + return _buildItem( context: context, spans: [ TextSpan( @@ -138,6 +137,11 @@ class EventItem extends StatelessWidget { iconData: Octicons.octoface, detail: 'Woops, ${event.type} not implemented yet', ); + } + + @override + build(BuildContext context) { + final theme = Provider.of(context); // all events types here: // https://developer.github.com/v3/activity/events/types/#event-types--payloads @@ -153,7 +157,7 @@ class EventItem extends StatelessWidget { case 'DownloadEvent': case 'FollowEvent': // TODO: - return defaultItem; + return _buildDefaultItem(context); case 'ForkEvent': final forkeeOwner = event.payload['forkee']['owner']['login'] as String; final forkeeName = event.payload['forkee']['name'] as String; @@ -180,7 +184,7 @@ class EventItem extends StatelessWidget { case 'InstallationEvent': case 'InstallationRepositoriesEvent': // TODO: - return defaultItem; + return _buildDefaultItem(context); case 'IssueCommentEvent': final isPullRequest = event.payload['issue']['pull_request'] != null; final resource = isPullRequest ? 'pull request' : 'issue'; @@ -244,7 +248,7 @@ class EventItem extends StatelessWidget { case 'ProjectEvent': case 'PublicEvent': // TODO: - return defaultItem; + return _buildDefaultItem(context); case 'PullRequestEvent': final action = event.payload['action']; final number = event.payload['pull_request']['number'] as int; @@ -274,7 +278,7 @@ class EventItem extends StatelessWidget { ); case 'PullRequestReviewEvent': // TODO: - return defaultItem; + return _buildDefaultItem(context); case 'PullRequestReviewCommentEvent': final number = event.payload['pull_request']['number'] as int; @@ -355,7 +359,7 @@ class EventItem extends StatelessWidget { case 'TeamEvent': case 'TeamAddEvent': // TODO: - return defaultItem; + return _buildDefaultItem(context); case 'WatchEvent': return _buildItem( context: context, @@ -369,7 +373,7 @@ class EventItem extends StatelessWidget { ], ); default: - return defaultItem; + return _buildDefaultItem(context); } } }