From 6bff2b44b6050a043dc684e909981d7f1ee8d3bf Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Sun, 15 Dec 2019 00:08:12 +0800 Subject: [PATCH] feat: gitlab screen routers --- lib/main.dart | 9 ++++++++- lib/screens/gitlab_blob.dart | 8 +++++++- lib/screens/gitlab_issue.dart | 2 +- lib/screens/gitlab_project.dart | 8 +++++--- lib/screens/gitlab_todos.dart | 2 +- lib/screens/gitlab_tree.dart | 11 ++++++++--- lib/utils/extensions.dart | 4 ++++ 7 files changed, 34 insertions(+), 10 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index d408e27..032d81d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,8 +5,11 @@ import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/theme.dart'; import 'package:git_touch/screens/commits.dart'; import 'package:git_touch/screens/credits.dart'; +import 'package:git_touch/screens/gitlab_blob.dart'; import 'package:git_touch/screens/gitlab_issue.dart'; +import 'package:git_touch/screens/gitlab_project.dart'; import 'package:git_touch/screens/gitlab_todos.dart'; +import 'package:git_touch/screens/gitlab_tree.dart'; import 'package:git_touch/screens/gitlab_user.dart'; import 'package:git_touch/screens/issue_form.dart'; import 'package:git_touch/screens/issues.dart'; @@ -101,6 +104,7 @@ class _HomeState extends State { } _buildScreen(int index) { + // return GitlabProjectScreen(32221); // return IssuesScreen(owner: 'flutter', name: 'flutter', isPullRequest: true); // return IssueScreen(number: 29, owner: 'reactjs', name: 'rfcs'); // return IssueScreen( @@ -232,6 +236,10 @@ void main() async { ]); final routers = [ + gitlabBlobRouter, + gitlabTreeRouter, + gitlabProjectRouter, + gitlabIssueRouter, loginRouter, settingsRouter, creditsRouter, @@ -246,7 +254,6 @@ void main() async { issueAddRouter, stargazersRouter, watchersRouter, - gitlabIssueRouter ]; routers.forEach((screen) { diff --git a/lib/screens/gitlab_blob.dart b/lib/screens/gitlab_blob.dart index af0c909..5ecaae0 100644 --- a/lib/screens/gitlab_blob.dart +++ b/lib/screens/gitlab_blob.dart @@ -3,15 +3,21 @@ import 'package:flutter/material.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/gitlab.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; +import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/widgets/blob_view.dart'; import 'package:provider/provider.dart'; +final gitlabBlobRouter = RouterScreen( + '/projects/:id/tree', + (context, params) => GitlabBlobScreen(params['id'].first.toInt, + path: params['path']?.first?.urldecode)); + class GitlabBlobScreen extends StatelessWidget { final int id; final String path; - GitlabBlobScreen(this.id, this.path); + GitlabBlobScreen(this.id, {this.path}); @override Widget build(BuildContext context) { diff --git a/lib/screens/gitlab_issue.dart b/lib/screens/gitlab_issue.dart index 8a40231..ba2ea1b 100644 --- a/lib/screens/gitlab_issue.dart +++ b/lib/screens/gitlab_issue.dart @@ -10,7 +10,7 @@ import 'package:timeago/timeago.dart' as timeago; import 'package:tuple/tuple.dart'; final gitlabIssueRouter = RouterScreen( - '/project/:id/issue/:iid', + '/projects/:id/issues/:iid', (context, params) => GitlabIssueScreen( int.parse(['id'].first), int.parse(params['iid'].first))); diff --git a/lib/screens/gitlab_project.dart b/lib/screens/gitlab_project.dart index 86b9af6..ef0833b 100644 --- a/lib/screens/gitlab_project.dart +++ b/lib/screens/gitlab_project.dart @@ -13,11 +13,13 @@ import 'package:git_touch/models/theme.dart'; import 'package:git_touch/widgets/repository_item.dart'; import 'package:git_touch/widgets/action_button.dart'; +final gitlabProjectRouter = RouterScreen('/projects/:id', + (context, params) => GitlabProjectScreen(int.parse(['id'].first))); + class GitlabProjectScreen extends StatelessWidget { final int id; - final String branch; - GitlabProjectScreen(this.id, {this.branch}); + GitlabProjectScreen(this.id); @override Widget build(BuildContext context) { @@ -114,7 +116,7 @@ class GitlabProjectScreen extends StatelessWidget { TableViewItem( leftIconData: Octicons.code, text: Text('Code'), - url: '/tree/$id', + url: '/projects/$id/tree', ), if (data.issuesEnabled) TableViewItem( diff --git a/lib/screens/gitlab_todos.dart b/lib/screens/gitlab_todos.dart index bec555c..775dc91 100644 --- a/lib/screens/gitlab_todos.dart +++ b/lib/screens/gitlab_todos.dart @@ -25,7 +25,7 @@ class GitlabTodosScreen extends StatelessWidget { children: data.map((item) { return Link( url: - '/project/${item.target.projectId}/${item.targetType == 'MergeRequest' ? 'merge_requests' : 'issue'}/${item.target.iid}', + '/projects/${item.target.projectId}/${item.targetType == 'MergeRequest' ? 'merge_requests' : 'issue'}/${item.target.iid}', child: Container( padding: CommonStyle.padding, child: Row( diff --git a/lib/screens/gitlab_tree.dart b/lib/screens/gitlab_tree.dart index 001ef21..3fa96ff 100644 --- a/lib/screens/gitlab_tree.dart +++ b/lib/screens/gitlab_tree.dart @@ -10,6 +10,11 @@ import 'package:git_touch/utils/utils.dart'; import 'package:primer/primer.dart'; import 'package:seti/seti.dart'; +final gitlabTreeRouter = RouterScreen( + '/projects/:id/tree', + (context, params) => GitlabTreeScreen(params['id'].first.toInt, + path: params['path']?.first?.urldecode)); + class GitlabTreeScreen extends StatelessWidget { final int id; final String path; @@ -39,7 +44,7 @@ class GitlabTreeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return RefreshStatefulScaffold>( - title: AppBarTitle(path == null ? 'Files' : path), + title: AppBarTitle(path ?? 'Files'), fetchData: () async { var url = '/projects/$id/repository/tree'; if (path != null) { @@ -58,9 +63,9 @@ class GitlabTreeScreen extends StatelessWidget { url: (() { switch (item.type) { case 'tree': - return '/tree/$id?path=${item.path}'; + return '/projects/$id/tree?path=${item.path.urlencode}'; case 'blob': - return '/blob/$id?path=${item.path}'; + return '/projects/$id/blob?path=${item.path.urlencode}'; default: return null; } diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart index 13b6a30..5cf0d0f 100644 --- a/lib/utils/extensions.dart +++ b/lib/utils/extensions.dart @@ -1,4 +1,8 @@ extension MyString on String { + int get toInt { + return int.parse(this); + } + String get urlencode { return Uri.encodeComponent(this); }