From d02b4800cac46e216a13def2691d2be967eff89c Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Fri, 31 Jan 2020 16:54:01 +0800 Subject: [PATCH] refactor: action entry --- lib/screens/gitea_object.dart | 6 +----- lib/screens/gitea_user.dart | 6 +----- lib/screens/gitlab_blob.dart | 9 +-------- lib/screens/gitlab_user.dart | 6 +----- lib/screens/issues.dart | 9 +++------ lib/screens/object.dart | 6 +----- lib/screens/user.dart | 5 +---- lib/widgets/action_entry.dart | 16 ++++++++++++---- 8 files changed, 21 insertions(+), 42 deletions(-) diff --git a/lib/screens/gitea_object.dart b/lib/screens/gitea_object.dart index b919e4f..59772d3 100644 --- a/lib/screens/gitea_object.dart +++ b/lib/screens/gitea_object.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/gitea.dart'; -import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/action_entry.dart'; @@ -39,12 +38,9 @@ class GiteaObjectScreen extends StatelessWidget { if (p is List) { return null; } else { - final theme = Provider.of(context); return ActionEntry( iconData: Icons.settings, - onTap: () { - theme.push(context, '/choose-code-theme'); - }, + url: '/choose-code-theme', ); } }, diff --git a/lib/screens/gitea_user.dart b/lib/screens/gitea_user.dart index 4fe12bf..559a422 100644 --- a/lib/screens/gitea_user.dart +++ b/lib/screens/gitea_user.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/gitea.dart'; -import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/action_entry.dart'; @@ -40,10 +39,7 @@ class GiteaUserScreen extends StatelessWidget { action: isViewer ? ActionEntry( iconData: Icons.settings, - onTap: () { - final theme = Provider.of(context); - theme.push(context, '/settings'); - }, + url: '/settings', ) : null, bodyBuilder: (data, _) { diff --git a/lib/screens/gitlab_blob.dart b/lib/screens/gitlab_blob.dart index 1c0134f..3054622 100644 --- a/lib/screens/gitlab_blob.dart +++ b/lib/screens/gitlab_blob.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/gitlab.dart'; -import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/action_entry.dart'; @@ -29,13 +28,7 @@ class GitlabBlobScreen extends StatelessWidget { '/projects/$id/repository/files/${path.urlencode}?ref=master'); // TODO: return GitlabBlob.fromJson(res); }, - action: ActionEntry( - iconData: Icons.settings, - onTap: () { - final theme = Provider.of(context); - theme.push(context, '/choose-code-theme'); - }, - ), + action: ActionEntry(iconData: Icons.settings, url: '/choose-code-theme'), bodyBuilder: (data, _) { return BlobView(path, base64Text: data.content); }, diff --git a/lib/screens/gitlab_user.dart b/lib/screens/gitlab_user.dart index 982ace5..719631e 100644 --- a/lib/screens/gitlab_user.dart +++ b/lib/screens/gitlab_user.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/gitlab.dart'; -import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/widgets/action_entry.dart'; import 'package:git_touch/widgets/repository_item.dart'; @@ -42,10 +41,7 @@ class GitlabUserScreen extends StatelessWidget { action: isViewer ? ActionEntry( iconData: Icons.settings, - onTap: () { - final theme = Provider.of(context); - theme.push(context, '/settings'); - }, + url: '/settings', ) : null, bodyBuilder: (data, _) { diff --git a/lib/screens/issues.dart b/lib/screens/issues.dart index 8bf1b19..213079e 100644 --- a/lib/screens/issues.dart +++ b/lib/screens/issues.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:git_touch/graphql/gh.dart'; import 'package:git_touch/models/auth.dart'; -import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/list_stateful.dart'; import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/action_entry.dart'; @@ -43,11 +42,9 @@ class IssuesScreen extends StatelessWidget { return ListStatefulScaffold( title: AppBarTitle('Issues'), actionBuilder: () => ActionEntry( - iconData: Octicons.plus, - onTap: () { - Provider.of(context) - .push(context, '/$owner/$name/issues/new'); - }), + iconData: Octicons.plus, + url: '/$owner/$name/issues/new', + ), onRefresh: () => _query(context), onLoadMore: (cursor) => _query(context, cursor), itemBuilder: (p) => IssueItem( diff --git a/lib/screens/object.dart b/lib/screens/object.dart index a020c49..0dd5d5a 100644 --- a/lib/screens/object.dart +++ b/lib/screens/object.dart @@ -1,6 +1,5 @@ import 'package:flutter/cupertino.dart'; import 'package:git_touch/models/github.dart'; -import 'package:git_touch/models/theme.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/widgets/action_entry.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; @@ -40,12 +39,9 @@ class ObjectScreen extends StatelessWidget { }, actionBuilder: (data, _) { if (data is Map) { - final theme = Provider.of(context); return ActionEntry( iconData: Icons.settings, - onTap: () { - theme.push(context, '/choose-code-theme'); - }, + url: '/choose-code-theme', ); } }, diff --git a/lib/screens/user.dart b/lib/screens/user.dart index ad6119f..76c0b4f 100644 --- a/lib/screens/user.dart +++ b/lib/screens/user.dart @@ -8,7 +8,6 @@ import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/action_entry.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/screens/repositories.dart'; -import 'package:git_touch/widgets/avatar.dart'; import 'package:git_touch/widgets/mutation_button.dart'; import 'package:git_touch/widgets/entry_item.dart'; import 'package:git_touch/widgets/repository_item.dart'; @@ -332,9 +331,7 @@ class UserScreen extends StatelessWidget { action: isViewer ? ActionEntry( iconData: Icons.settings, - onTap: () { - theme.push(context, '/settings'); - }, + url: '/settings', ) : null, actionBuilder: isViewer diff --git a/lib/widgets/action_entry.dart b/lib/widgets/action_entry.dart index 1ded9c4..47069b8 100644 --- a/lib/widgets/action_entry.dart +++ b/lib/widgets/action_entry.dart @@ -5,23 +5,31 @@ import 'package:provider/provider.dart'; class ActionEntry extends StatelessWidget { final IconData iconData; + final String url; final VoidCallback onTap; - ActionEntry({this.iconData, this.onTap}); + ActionEntry({this.url, this.iconData, this.onTap}); @override Widget build(BuildContext context) { - switch (Provider.of(context).theme) { + final theme = Provider.of(context); + switch (theme.theme) { case AppThemeType.cupertino: return CupertinoButton( minSize: 0, child: Icon(iconData, size: 22), padding: EdgeInsets.zero, - onPressed: onTap, + onPressed: () { + if (onTap != null) onTap(); + if (url != null) theme.push(context, url); + }, ); default: return IconButton( icon: Icon(iconData), - onPressed: onTap, + onPressed: () { + if (onTap != null) onTap(); + if (url != null) theme.push(context, url); + }, ); } }