improvment: drop screen builder for link

This commit is contained in:
Rongjian Zhang 2019-12-13 11:02:05 +08:00
parent 151ca1fbaa
commit 032be3b8f3
4 changed files with 18 additions and 16 deletions

View File

@ -5,6 +5,7 @@ import 'package:git_touch/models/auth.dart';
import 'package:git_touch/models/theme.dart'; import 'package:git_touch/models/theme.dart';
import 'package:git_touch/screens/commits.dart'; import 'package:git_touch/screens/commits.dart';
import 'package:git_touch/screens/credits.dart'; import 'package:git_touch/screens/credits.dart';
import 'package:git_touch/screens/gitlab_issue.dart';
import 'package:git_touch/screens/gitlab_todos.dart'; import 'package:git_touch/screens/gitlab_todos.dart';
import 'package:git_touch/screens/gitlab_user.dart'; import 'package:git_touch/screens/gitlab_user.dart';
import 'package:git_touch/screens/issue_form.dart'; import 'package:git_touch/screens/issue_form.dart';
@ -229,7 +230,7 @@ void main() async {
codeModel.init(), codeModel.init(),
]); ]);
// TODO: gitlab // github
themeModel.router.define('/login', handler: Handler( themeModel.router.define('/login', handler: Handler(
handlerFunc: (context, params) { handlerFunc: (context, params) {
return LoginScreen(); return LoginScreen();
@ -309,6 +310,14 @@ void main() async {
}, },
)); ));
// gitlab
themeModel.router.define('/project/:id/issue/:iid', handler: Handler(
handlerFunc: (context, params) {
return GitlabIssueScreen(
int.parse(['id'].first), int.parse(params['iid'].first));
},
));
runApp(MultiProvider( runApp(MultiProvider(
providers: [ providers: [
ChangeNotifierProvider(create: (context) => notificationModel), ChangeNotifierProvider(create: (context) => notificationModel),

View File

@ -3,7 +3,6 @@ import 'package:git_touch/models/auth.dart';
import 'package:git_touch/models/gitlab.dart'; import 'package:git_touch/models/gitlab.dart';
import 'package:git_touch/models/theme.dart'; import 'package:git_touch/models/theme.dart';
import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart';
import 'package:git_touch/screens/gitlab_issue.dart';
import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/utils/utils.dart';
import 'package:git_touch/widgets/avatar.dart'; import 'package:git_touch/widgets/avatar.dart';
import 'package:git_touch/widgets/link.dart'; import 'package:git_touch/widgets/link.dart';
@ -25,9 +24,8 @@ class GitlabTodosScreen extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: data.map((item) { children: data.map((item) {
return Link( return Link(
screenBuilder: (_) => GitlabIssueScreen( url:
item.target.projectId, item.target.iid, '/project/${item.target.projectId}/${item.targetType == 'MergeRequest' ? 'merge_requests' : 'issue'}/${item.target.iid}',
isMr: item.targetType == 'MergeRequest'),
child: Container( child: Container(
padding: CommonStyle.padding, padding: CommonStyle.padding,
child: Row( child: Row(

View File

@ -5,7 +5,6 @@ import 'package:git_touch/graphql/github_object.dart';
import 'package:git_touch/models/code.dart'; import 'package:git_touch/models/code.dart';
import 'package:git_touch/models/theme.dart'; import 'package:git_touch/models/theme.dart';
import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart';
import 'package:git_touch/screens/code_theme.dart';
import 'package:git_touch/widgets/action_entry.dart'; import 'package:git_touch/widgets/action_entry.dart';
import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/markdown_view.dart'; import 'package:git_touch/widgets/markdown_view.dart';
@ -102,10 +101,11 @@ class ObjectScreen extends StatelessWidget {
return ActionEntry( return ActionEntry(
iconData: Octicons.settings, iconData: Octicons.settings,
onTap: () { onTap: () {
if (data != null) { // TODO:
Provider.of<ThemeModel>(context).pushRoute( // if (data != null) {
context, (_) => CodeThemeScreen(blob.text, _language)); // Provider.of<ThemeModel>(context).pushRoute(
} // context, (_) => CodeThemeScreen(blob.text, _language));
// }
}, },
); );
default: default:

View File

@ -7,25 +7,20 @@ import 'package:git_touch/models/theme.dart';
class Link extends StatelessWidget { class Link extends StatelessWidget {
final Widget child; final Widget child;
final String url; final String url;
final WidgetBuilder screenBuilder;
final Function onTap; final Function onTap;
final VoidCallback onLongPress; final VoidCallback onLongPress;
Link({ Link({
this.child, this.child,
this.url, this.url,
this.screenBuilder,
this.onTap, this.onTap,
this.onLongPress, this.onLongPress,
}) : assert(screenBuilder == null || url == null); });
void _onTap(BuildContext context) { void _onTap(BuildContext context) {
if (onTap != null) { if (onTap != null) {
return onTap(); return onTap();
} }
if (screenBuilder != null) {
return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder);
}
if (url != null) { if (url != null) {
if (url.startsWith('/')) { if (url.startsWith('/')) {
Provider.of<ThemeModel>(context).push(context, url); Provider.of<ThemeModel>(context).push(context, url);