From 3261db8fee63c67f5725508849b2a0b5c396fdab Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Mon, 12 Sep 2022 01:54:07 +0800 Subject: [PATCH] refactor: use go_router --- lib/app.dart | 24 +- lib/home.dart | 24 +- lib/main.dart | 36 +- lib/models/theme.dart | 28 +- lib/router.dart | 1483 +++++++++++++++++-------------- lib/screens/gh_gists_files.dart | 6 +- pubspec.lock | 14 +- pubspec.yaml | 2 +- 8 files changed, 863 insertions(+), 754 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index e2b36e6..e4b9fe5 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:git_touch/home.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/S.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/theme.dart'; -import 'package:provider/provider.dart'; -import 'package:flutter_gen/gen_l10n/S.dart'; +import 'package:git_touch/router.dart'; import 'package:intl/locale.dart' as l; +import 'package:provider/provider.dart'; class MyApp extends StatelessWidget { @override @@ -49,14 +49,19 @@ class MyApp extends StatelessWidget { return Container( key: auth.rootKey, child: theme.theme == AppThemeType.cupertino - ? CupertinoApp( + ? CupertinoApp.router( + routeInformationProvider: router.routeInformationProvider, + routeInformationParser: router.routeInformationParser, + routerDelegate: router.routerDelegate, theme: CupertinoThemeData(brightness: theme.brightness), - home: Home(), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, localeListResolutionCallback: localeListResolutionCallback, ) - : MaterialApp( + : MaterialApp.router( + routeInformationProvider: router.routeInformationProvider, + routeInformationParser: router.routeInformationParser, + routerDelegate: router.routerDelegate, theme: ThemeData( brightness: theme.brightness, primaryColor: @@ -66,9 +71,10 @@ class MyApp extends StatelessWidget { builders: { TargetPlatform.android: ZoomPageTransitionsBuilder(), }, - ), colorScheme: ColorScheme.fromSwatch().copyWith(secondary: theme.palette.primary), + ), + colorScheme: ColorScheme.fromSwatch() + .copyWith(secondary: theme.palette.primary), ), - home: Home(), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, localeListResolutionCallback: localeListResolutionCallback, diff --git a/lib/home.dart b/lib/home.dart index a156aa4..a68c013 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -1,33 +1,33 @@ -import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/S.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/notification.dart'; import 'package:git_touch/models/theme.dart'; import 'package:git_touch/screens/bb_explore.dart'; import 'package:git_touch/screens/bb_teams.dart'; import 'package:git_touch/screens/bb_user.dart'; +import 'package:git_touch/screens/ge_search.dart'; import 'package:git_touch/screens/ge_user.dart'; +import 'package:git_touch/screens/gh_news.dart'; +import 'package:git_touch/screens/gh_notification.dart'; +import 'package:git_touch/screens/gh_search.dart'; +import 'package:git_touch/screens/gh_trending.dart'; +import 'package:git_touch/screens/gh_user.dart'; +import 'package:git_touch/screens/gl_explore.dart'; +import 'package:git_touch/screens/gl_groups.dart'; import 'package:git_touch/screens/gl_search.dart'; +import 'package:git_touch/screens/gl_user.dart'; import 'package:git_touch/screens/go_search.dart'; import 'package:git_touch/screens/go_user.dart'; import 'package:git_touch/screens/gt_orgs.dart'; import 'package:git_touch/screens/gt_user.dart'; -import 'package:git_touch/screens/gl_explore.dart'; -import 'package:git_touch/screens/gl_groups.dart'; -import 'package:git_touch/screens/gl_user.dart'; import 'package:git_touch/screens/login.dart'; -import 'package:git_touch/screens/gh_notification.dart'; -import 'package:git_touch/screens/gh_user.dart'; import 'package:git_touch/utils/utils.dart'; +import 'package:github/github.dart'; import 'package:launch_review/launch_review.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:provider/provider.dart'; -import 'package:git_touch/screens/gh_news.dart'; -import 'package:git_touch/screens/gh_search.dart'; -import 'package:git_touch/screens/gh_trending.dart'; -import 'package:git_touch/screens/ge_search.dart'; -import 'package:github/github.dart'; -import 'package:flutter_gen/gen_l10n/S.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:universal_io/io.dart'; diff --git a/lib/main.dart b/lib/main.dart index 108ac53..08d0065 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,14 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:git_touch/app.dart'; -import 'package:git_touch/models/code.dart'; import 'package:git_touch/models/auth.dart'; +import 'package:git_touch/models/code.dart'; +import 'package:git_touch/models/notification.dart'; import 'package:git_touch/models/theme.dart'; -import 'package:git_touch/router.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; -import 'package:git_touch/models/notification.dart'; -import 'package:fluro/fluro.dart'; -import 'package:flutter/services.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; void main() async { @@ -31,34 +29,6 @@ void main() async { codeModel.init(), ]); - for (var screen in CommonRouter.routes) { - themeModel.router.define(CommonRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } - for (var screen in GitlabRouter.routes) { - themeModel.router.define(GitlabRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } - for (var screen in GiteaRouter.routes) { - themeModel.router.define(GiteaRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } - for (var screen in BitbucketRouter.routes) { - themeModel.router.define(BitbucketRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } - for (var screen in GithubRouter.routes) { - themeModel.router.define(GithubRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } - for (var screen in GiteeRouter.routes) { - themeModel.router.define(GiteeRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } - for (var screen in GogsRouter.routes) { - themeModel.router.define(GogsRouter.prefix + screen.path, - handler: Handler(handlerFunc: screen.handler)); - } // To match status bar color to app bar color SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( statusBarColor: Colors.transparent, diff --git a/lib/models/theme.dart b/lib/models/theme.dart index bac0469..975bde4 100644 --- a/lib/models/theme.dart +++ b/lib/models/theme.dart @@ -1,15 +1,16 @@ -import 'package:universal_io/io.dart'; import 'dart:async'; + import 'package:fimber/fimber.dart'; -import 'package:fluro/fluro.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:git_touch/utils/utils.dart'; -import 'package:git_touch/widgets/action_button.dart'; -import 'package:primer/primer.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/S.dart'; +import 'package:git_touch/utils/utils.dart'; +import 'package:git_touch/widgets/action_button.dart'; +import 'package:go_router/go_router.dart'; +import 'package:primer/primer.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:universal_io/io.dart'; class AppThemeType { static const material = 0; @@ -177,8 +178,6 @@ class ThemeModel with ChangeNotifier { notifyListeners(); } - final router = FluroRouter(); - final paletteLight = Palette( primary: PrimerColors.blue500, text: Colors.black, @@ -250,14 +249,11 @@ class ThemeModel with ChangeNotifier { push(BuildContext context, String url, {bool replace = false}) { // Fimber.d(url); if (url.startsWith('/')) { - return router.navigateTo( - context, - url, - transition: theme == AppThemeType.cupertino - ? TransitionType.cupertino - : TransitionType.material, - replace: replace, - ); + if (replace) { + context.replace(url); + } else { + context.push(url); + } } else { launchStringUrl(url); } diff --git a/lib/router.dart b/lib/router.dart index 196bd3e..5cb6c7e 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -1,12 +1,12 @@ -import 'package:fluro/fluro.dart'; +import 'package:git_touch/home.dart'; import 'package:git_touch/screens/bb_commits.dart'; import 'package:git_touch/screens/bb_issue.dart'; import 'package:git_touch/screens/bb_issue_comment.dart'; import 'package:git_touch/screens/bb_issue_form.dart'; -import 'package:git_touch/screens/bb_object.dart'; -import 'package:git_touch/screens/bb_repo.dart'; import 'package:git_touch/screens/bb_issues.dart'; +import 'package:git_touch/screens/bb_object.dart'; import 'package:git_touch/screens/bb_pulls.dart'; +import 'package:git_touch/screens/bb_repo.dart'; import 'package:git_touch/screens/bb_user.dart'; import 'package:git_touch/screens/code_theme.dart'; import 'package:git_touch/screens/ge_blob.dart'; @@ -18,7 +18,6 @@ import 'package:git_touch/screens/ge_issue.dart'; import 'package:git_touch/screens/ge_issue_comment.dart'; import 'package:git_touch/screens/ge_issue_form.dart'; import 'package:git_touch/screens/ge_issues.dart'; -import 'package:git_touch/screens/ge_pull.dart'; import 'package:git_touch/screens/ge_pulls.dart'; import 'package:git_touch/screens/ge_repo.dart'; import 'package:git_touch/screens/ge_repos.dart'; @@ -27,15 +26,38 @@ import 'package:git_touch/screens/ge_tree.dart'; import 'package:git_touch/screens/ge_user.dart'; import 'package:git_touch/screens/ge_users.dart'; import 'package:git_touch/screens/gh_commits.dart'; +import 'package:git_touch/screens/gh_compare.dart'; import 'package:git_touch/screens/gh_contributors.dart'; import 'package:git_touch/screens/gh_events.dart'; import 'package:git_touch/screens/gh_files.dart'; +import 'package:git_touch/screens/gh_gist_object.dart'; +import 'package:git_touch/screens/gh_gists.dart'; import 'package:git_touch/screens/gh_gists_files.dart'; +import 'package:git_touch/screens/gh_issue.dart'; +import 'package:git_touch/screens/gh_issue_form.dart'; +import 'package:git_touch/screens/gh_issues.dart'; +import 'package:git_touch/screens/gh_object.dart'; import 'package:git_touch/screens/gh_org_repos.dart'; +import 'package:git_touch/screens/gh_orgs.dart'; +import 'package:git_touch/screens/gh_pulls.dart'; import 'package:git_touch/screens/gh_releases.dart'; +import 'package:git_touch/screens/gh_repo.dart'; +import 'package:git_touch/screens/gh_repos.dart'; +import 'package:git_touch/screens/gh_user.dart'; +import 'package:git_touch/screens/gh_users.dart'; +import 'package:git_touch/screens/gl_blob.dart'; import 'package:git_touch/screens/gl_commit.dart'; +import 'package:git_touch/screens/gl_commits.dart'; +import 'package:git_touch/screens/gl_group.dart'; +import 'package:git_touch/screens/gl_issue.dart'; import 'package:git_touch/screens/gl_issue_form.dart'; +import 'package:git_touch/screens/gl_issues.dart'; +import 'package:git_touch/screens/gl_members.dart'; +import 'package:git_touch/screens/gl_merge_requests.dart'; +import 'package:git_touch/screens/gl_project.dart'; import 'package:git_touch/screens/gl_starrers.dart'; +import 'package:git_touch/screens/gl_tree.dart'; +import 'package:git_touch/screens/gl_user.dart'; import 'package:git_touch/screens/go_commits.dart'; import 'package:git_touch/screens/go_issues.dart'; import 'package:git_touch/screens/go_object.dart'; @@ -55,681 +77,796 @@ import 'package:git_touch/screens/gt_repo.dart'; import 'package:git_touch/screens/gt_repos.dart'; import 'package:git_touch/screens/gt_status.dart'; import 'package:git_touch/screens/gt_user.dart'; -import 'package:git_touch/screens/gl_blob.dart'; -import 'package:git_touch/screens/gl_commits.dart'; -import 'package:git_touch/screens/gl_group.dart'; -import 'package:git_touch/screens/gl_issue.dart'; -import 'package:git_touch/screens/gl_issues.dart'; -import 'package:git_touch/screens/gl_members.dart'; -import 'package:git_touch/screens/gl_merge_requests.dart'; -import 'package:git_touch/screens/gl_project.dart'; -import 'package:git_touch/screens/gl_tree.dart'; -import 'package:git_touch/screens/gl_user.dart'; -import 'package:git_touch/screens/gh_issue.dart'; -import 'package:git_touch/screens/gh_issue_form.dart'; -import 'package:git_touch/screens/gh_issues.dart'; import 'package:git_touch/screens/gt_users.dart'; import 'package:git_touch/screens/login.dart'; -import 'package:git_touch/screens/gh_object.dart'; -import 'package:git_touch/screens/gh_pulls.dart'; -import 'package:git_touch/screens/gh_repos.dart'; -import 'package:git_touch/screens/gh_repo.dart'; import 'package:git_touch/screens/settings.dart'; -import 'package:git_touch/screens/gh_user.dart'; -import 'package:git_touch/screens/gh_users.dart'; -import 'package:git_touch/screens/gh_orgs.dart'; -import 'package:git_touch/screens/gh_gists.dart'; -import 'package:git_touch/screens/gh_gist_object.dart'; -import 'package:git_touch/screens/gh_compare.dart'; +import 'package:go_router/go_router.dart'; -class RouterScreen { - String path; - HandlerFunc handler; - RouterScreen(this.path, this.handler); -} +final router = GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (context, state) => Home(), + routes: [ + // common + GoRoute( + path: 'choose-code-theme', + builder: (context, state) => LoginScreen(), + ), + GoRoute( + path: 'login', + builder: (context, state) => CodeThemeScreen(), + ), + GoRoute( + path: 'settings', + builder: (context, state) => SettingsScreen(), + ), -class CommonRouter { - static const prefix = ''; - static final routes = [ - CommonRouter.codeTheme, - CommonRouter.login, - CommonRouter.settings - ]; - static final codeTheme = - RouterScreen('/choose-code-theme', (context, parameters) { - return CodeThemeScreen(); - }); - static final login = - RouterScreen('/login', (context, parameters) => LoginScreen()); - static final settings = - RouterScreen('/settings', (context, parameters) => SettingsScreen()); -} + // github + GoRoute( + path: 'github', + builder: (context, state) => Home(), + routes: [ + GoRoute( + path: ':login', + builder: (context, state) { + final login = state.params['login']!; + final tab = state.queryParams['tab']; + switch (tab) { + case 'followers': + return GhFollowers(login); + case 'following': + return GhFollowing(login); + case 'people': + return GhMembers(login); + case 'stars': + return GhStars(login); + case 'repositories': + return GhRepos(login); + case 'orgrepo': + return GhOrgReposScreen(login); + case 'organizations': + return GhUserOrganizationScreen(login); + case 'gists': + return GhGistsScreen(login); + case 'events': + return GhEventsScreen(login); + default: + return GhUser(login); + } + }, + routes: [ + GoRoute( + path: 'gists/:id', + builder: (context, state) => GhGistsFilesScreen( + state.params['login']!, + state.params['id']!, + ), + routes: [ + GoRoute( + path: ':file', + builder: (context, state) => GistObjectScreen( + state.params['login']!, + state.params['id']!, + state.params['file']!, + content: state.queryParams['content'], + ), + ), + ], + ), + ], + ), + GoRoute( + path: ':owner/:name', + builder: (context, state) { + return GhRepoScreen( + state.params['owner']!, + state.params['name']!, + branch: state.queryParams['ref'], + ); + }, + routes: [ + GoRoute( + path: 'stargazers', + builder: (context, state) => GhStargazers( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'watchers', + builder: (context, state) => + GhWachers(state.params['owner']!, state.params['name']!), + ), + GoRoute( + path: 'contributors', + builder: (context, state) => GhContributorsScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'releases', + builder: (context, state) => GhReleasesScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'commits/:branch', + builder: (context, state) => GhCommits( + state.params['owner']!, + state.params['name']!, + branch: state.params['branch'], + ), + ), + GoRoute( + path: 'compare/:before/:head', + builder: (context, state) => GhComparisonScreen( + state.params['owner']!, + state.params['name']!, + state.params['before']!, + state.params['head']!, + ), + ), + GoRoute( + path: 'blob/:ref', + builder: (context, state) => GhObjectScreen( + state.params['owner']!, + state.params['name']!, + state.params['ref']!, + path: state.queryParams['path'], + raw: state.queryParams['raw'], + )), + GoRoute( + path: 'issues', + builder: (context, state) => GhIssuesScreen( + state.params['owner']!, + state.params['name']!, + ), + routes: [ + GoRoute( + path: ':number', + builder: (context, state) => GhIssueScreen( + state.params['owner']!, + state.params['name']!, + int.parse(state.params['number']!), + ), + ), + GoRoute( + path: 'new', + builder: (context, state) => GhIssueFormScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + ], + ), + GoRoute( + path: 'pulls', + builder: (context, state) => GhPullsScreen( + state.params['owner']!, + state.params['name']!, + ), + routes: [ + GoRoute( + path: ':number', + builder: (context, state) => GhIssueScreen( + state.params['owner']!, + state.params['name']!, + int.parse(state.params['number']!), + ), + routes: [ + GoRoute( + path: 'files', + builder: (context, state) { + return GhFilesScreen( + state.params['owner']!, + state.params['name']!, + int.parse(state.params['number']!), + ); + }, + ), + ], + ), + ], + ) + ], + ), + ], + ), -class GithubRouter { - static const prefix = '/github'; - static final routes = [ - GithubRouter.user, - GithubRouter.repo, - GithubRouter.issueAdd, - GithubRouter.issues, - GithubRouter.pulls, - GithubRouter.issue, - GithubRouter.pull, - GithubRouter.commits, - GithubRouter.object, - GithubRouter.stargazers, - GithubRouter.watchers, - GithubRouter.contributors, - GithubRouter.files, - GithubRouter.gistFiles, - GithubRouter.gistObject, - GithubRouter.compare, - GithubRouter.releases, - ]; - static final user = RouterScreen('/:login', (context, parameters) { - final login = parameters['login']!.first; - final tab = parameters['tab']?.first; - switch (tab) { - case 'followers': - return GhFollowers(login); - case 'following': - return GhFollowing(login); - case 'people': - return GhMembers(login); - case 'stars': - return GhStars(login); - case 'repositories': - return GhRepos(login); - case 'orgrepo': - return GhOrgReposScreen(login); - case 'organizations': - return GhUserOrganizationScreen(login); - case 'gists': - return GhGistsScreen(login); - case 'events': - return GhEventsScreen(login); - default: - return GhUser(login); - } - }); - static final repo = RouterScreen('/:owner/:name', (context, parameters) { - if (parameters['ref'] == null) { - return GhRepoScreen( - parameters['owner']!.first, parameters['name']!.first); - } else { - return GhRepoScreen(parameters['owner']!.first, parameters['name']!.first, - branch: parameters['ref']!.first); - } - }); - static final gistObject = - RouterScreen('/:login/gists/:id/:file', (context, parameters) { - return GistObjectScreen( - parameters['login']!.first, - parameters['id']!.first, - parameters['file']!.first, - raw: parameters['raw']?.first, - content: parameters['content']!.first, - ); - }); - static final gistFiles = - RouterScreen('/:login/gists/:id', (context, parameters) { - return GhGistsFilesScreen( - parameters['login']!.first, parameters['id']!.first); - }); - static final issueAdd = - RouterScreen('/:owner/:name/issues/new', (context, parameters) { - return GhIssueFormScreen( - parameters['owner']!.first, parameters['name']!.first); - }); - static final issues = RouterScreen( - '/:owner/:name/issues', - (context, parameters) => GhIssuesScreen( - parameters['owner']!.first, parameters['name']!.first)); - static final pulls = RouterScreen( - '/:owner/:name/pulls', - (context, parameters) => - GhPullsScreen(parameters['owner']!.first, parameters['name']!.first)); - static final issue = RouterScreen( - '/:owner/:name/issues/:number', - (context, parameters) => GhIssueScreen(parameters['owner']!.first, - parameters['name']!.first, int.parse(parameters['number']!.first))); - static final pull = RouterScreen( - '/:owner/:name/pull/:number', - (context, parameters) => GhIssueScreen(parameters['owner']!.first, - parameters['name']!.first, int.parse(parameters['number']!.first))); - static final files = RouterScreen( - '/:owner/:name/pull/:number/files', - (context, parameters) => GhFilesScreen( - parameters['owner']!.first, - parameters['name']!.first, - int.parse(parameters['number']!.first), - )); - static final compare = RouterScreen( - '/:owner/:name/compare/:before/:head', - (context, parameters) => GhComparisonScreen( - parameters['owner']!.first, - parameters['name']!.first, - parameters['before']!.first, - parameters['head']!.first)); - static final commits = RouterScreen( - '/:owner/:name/commits/:branch', - (context, parameters) => GhCommits( - parameters['owner']!.first, parameters['name']!.first, - branch: parameters['branch']!.first)); - static final object = - RouterScreen('/:owner/:name/blob/:ref', (context, parameters) { - return GhObjectScreen( - parameters['owner']!.first, - parameters['name']!.first, - parameters['ref']!.first, - path: parameters['path']?.first, - raw: parameters['raw']?.first, - ); - }); - static final stargazers = - RouterScreen('/:owner/:name/stargazers', (context, parameters) { - return GhStargazers(parameters['owner']!.first, parameters['name']!.first); - }); - static final watchers = - RouterScreen('/:owner/:name/watchers', (context, parameters) { - return GhWachers(parameters['owner']!.first, parameters['name']!.first); - }); - static final contributors = - RouterScreen('/:owner/:name/contributors', (context, parameters) { - return GhContributorsScreen( - parameters['owner']!.first, parameters['name']!.first); - }); - static final releases = - RouterScreen('/:owner/:name/releases', (context, parameters) { - return GhReleasesScreen( - parameters['owner']!.first, parameters['name']!.first); - }); -} + // gitlab + GoRoute( + path: 'gitlab', + builder: (context, state) => Home(), + routes: [ + GoRoute( + path: 'user/:id', + builder: (context, state) => + GlUserScreen(int.parse(state.params['id']!)), + ), + GoRoute( + path: 'group/:id', + builder: (context, state) => + GlGroupScreen(int.parse(state.params['id']!)), + ), + GoRoute( + path: 'groups/:id/members', + builder: (context, state) => + GlMembersScreen(int.parse(state.params['id']!), 'groups'), + ), + GoRoute( + path: 'projects/:id', + builder: (context, state) => GlProjectScreen( + int.parse(state.params['id']!), + branch: state.queryParams['branch'], + ), + routes: [ + GoRoute( + path: 'starrers', + builder: (context, state) => + GlStarrersScreen(int.parse(state.params['id']!)), + ), + GoRoute( + path: 'commits', + builder: (context, state) => GlCommitsScreen( + state.params['id']!, + prefix: state.queryParams['prefix'], + branch: state.queryParams['branch'], + ), + ), + GoRoute( + path: 'commit/:sha', + builder: (context, state) => GlCommitScreen( + state.params['id']!, + sha: state.params['sha']!, + ), + ), + GoRoute( + path: 'members', + builder: (context, state) => GlMembersScreen( + int.parse(state.params['id']!), 'projects'), + ), + GoRoute( + path: 'blob/:ref', + builder: (context, state) => GlBlobScreen( + int.parse(state.params['id']!), + state.params['ref']!, + path: state.queryParams['path'], + ), + ), + GoRoute( + path: 'tree/:ref', + builder: (context, state) => GlTreeScreen( + int.parse(state.params['id']!), + state.params['ref']!, + path: state.queryParams['path'], + ), + ), + GoRoute( + path: 'issues', + builder: (context, state) => GlIssuesScreen( + state.params['id']!, + prefix: state.queryParams['prefix'], + ), + routes: [ + GoRoute( + path: ':iid', + builder: (context, state) => GlIssueScreen( + int.parse(state.params['id']!), + int.parse(state.params['iid']!), + ), + ), + GoRoute( + path: 'new', + builder: (context, state) => GlIssueFormScreen( + int.parse(state.params['id']!), + ), + ), + ]), + GoRoute( + path: 'merge_requests', + builder: (context, state) => GlMergeRequestsScreen( + state.params['id']!, + prefix: state.queryParams['prefix'], + ), + ), + ], + ) + ], + ), -class GitlabRouter { - static const prefix = '/gitlab'; - static final routes = [ - GitlabRouter.user, - GitlabRouter.group, - GitlabRouter.blob, - GitlabRouter.tree, - GitlabRouter.project, - GitlabRouter.starrers, - GitlabRouter.issues, - GitlabRouter.mergeRequests, - GitlabRouter.commits, - GitlabRouter.commit, - GitlabRouter.projectMembers, - GitlabRouter.groupMembers, - GitlabRouter.issueAdd, - GitlabRouter.issue, - ]; - static final user = RouterScreen( - '/user/:id', - (context, parameters) => - GlUserScreen(int.parse(parameters['id']!.first))); - static final group = RouterScreen( - '/group/:id', - (context, parameters) => - GlGroupScreen(int.parse(parameters['id']!.first))); - static final blob = RouterScreen( - '/projects/:id/blob/:ref', - (context, parameters) => GlBlobScreen( - int.parse(parameters['id']!.first), parameters['ref']!.first, - path: parameters['path']?.first)); - static final tree = RouterScreen( - '/projects/:id/tree/:ref', - (context, parameters) => GlTreeScreen( - int.parse(parameters['id']!.first), parameters['ref']!.first, - path: parameters['path']?.first)); - static final project = RouterScreen('/projects/:id', (context, parameters) { - if (parameters['branch'] == null) { - return GlProjectScreen(int.parse(parameters['id']!.first)); - } else { - return GlProjectScreen(int.parse(parameters['id']!.first), - branch: parameters['branch']!.first); - } - }); - static final starrers = RouterScreen( - '/projects/:id/starrers', - (context, parameters) => - GlStarrersScreen(int.parse(parameters['id']!.first))); - static final issues = RouterScreen( - '/projects/:id/issues', - (context, parameters) => GlIssuesScreen( - parameters['id']!.first, - prefix: parameters['prefix']!.first, - )); - static final mergeRequests = RouterScreen( - '/projects/:id/merge_requests', - (context, parameters) => GlMergeRequestsScreen( - parameters['id']!.first, - prefix: parameters['prefix']!.first, - )); - static final commits = - RouterScreen('/projects/:id/commits', (context, parameters) { - if (parameters['branch'] == null) { - return GlCommitsScreen(parameters['id']!.first, - prefix: parameters['prefix']!.first); - } else { - return GlCommitsScreen(parameters['id']!.first, - prefix: parameters['prefix']!.first, - branch: parameters['branch']!.first); - } - }); - static final commit = RouterScreen( - '/projects/:id/commit/:sha', - (context, parameters) => GlCommitScreen(parameters['id']!.first, - sha: parameters['sha']!.first)); - static final projectMembers = RouterScreen( - '/projects/:id/members', - (context, parameters) => - GlMembersScreen(int.parse(parameters['id']!.first), 'projects')); - static final groupMembers = RouterScreen( - '/groups/:id/members', - (context, parameters) => - GlMembersScreen(int.parse(parameters['id']!.first), 'groups')); - static final issue = RouterScreen( - '/projects/:id/issues/:iid', - (context, parameters) { - return GlIssueScreen( - int.parse(parameters['id']!.first), - int.parse(parameters['iid']!.first), - ); - }, - ); - static final issueAdd = - RouterScreen('/projects/:id/issues/new', (context, parameters) { - return GlIssueFormScreen(int.parse(parameters['id']!.first)); - }); -} + // gitea + GoRoute( + path: 'gitea', + builder: (context, state) => Home(), + routes: [ + GoRoute( + path: 'status', + builder: (context, state) => GtStatusScreen(), + ), + GoRoute( + path: ':login', + builder: (context, state) { + final login = state.params['login']!; + final tab = state.queryParams['tab']; + switch (tab) { + case 'followers': + return GtUsersScreen.followers(login); + case 'following': + return GtUsersScreen.following(login); + case 'people': + return GtUsersScreen.member(login); + case 'stars': + return GtReposScreen.star(login); + case 'repositories': + return GtReposScreen(login); + case 'orgrepo': + return GtReposScreen.org(login); + case 'organizations': + return GtOrgsScreen.ofUser(login); + default: + return GtUserScreen(login); + } + }, + ), + GoRoute( + path: ':owner/:name', + builder: (context, state) => GtRepoScreen( + state.params['owner']!, + state.params['name']!, + ), + routes: [ + GoRoute( + path: 'blob', + builder: (context, state) => GtObjectScreen( + state.params['owner']!, + state.params['name']!, + path: state.queryParams['path'], + ), + ), + GoRoute( + path: 'stargazers', + builder: (context, state) { + return GtUsersScreen.stargazers( + state.params['owner']!, + state.params['name']!, + ); + }, + ), + GoRoute( + path: 'watchers', + builder: (context, state) { + return GtUsersScreen.watchers( + state.params['owner']!, + state.params['name']!, + ); + }, + ), + GoRoute( + path: 'stargazers', + builder: (context, state) => GtUsersScreen.stargazers( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'watchers', + builder: (context, state) => GtUsersScreen.watchers( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'forks', + builder: (context, state) => GtReposScreen.forks( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'commits', + builder: (context, state) => GtCommitsScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'pulls', + builder: (context, state) => GtIssuesScreen( + state.params['owner']!, + state.params['name']!, + isPr: true, + ), + ), + GoRoute( + path: 'issues', + builder: (context, state) => GtIssuesScreen( + state.params['owner']!, + state.params['name']!, + ), + routes: [ + GoRoute( + path: ':number', + builder: (context, state) => GtIssueScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + ), + routes: [ + GoRoute( + path: 'comment', + builder: (context, state) { + return GtIssueCommentScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + body: state.queryParams['body']!, + id: state.queryParams['id']!, + ); + }, + ), + ]), + GoRoute( + path: 'new', + builder: (context, state) => GtIssueFormScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + ], + ), + ], + ) + ], + ), -class GiteaRouter { - static const prefix = '/gitea'; - static final routes = [ - GiteaRouter.status, - GiteaRouter.user, - GiteaRouter.repo, - GiteaRouter.object, - GiteaRouter.stargazers, - GiteaRouter.watchers, - GiteaRouter.forks, - GiteaRouter.commits, - GiteaRouter.issues, - GiteaRouter.pulls, - GiteaRouter.issueAdd, - GiteaRouter.issue, - GiteaRouter.issueComment, - ]; - static final status = - RouterScreen('/status', (context, parameters) => GtStatusScreen()); - static final user = RouterScreen('/:login', (context, parameters) { - final login = parameters['login']!.first; - final tab = parameters['tab']?.first; - switch (tab) { - case 'followers': - return GtUsersScreen.followers(login); - case 'following': - return GtUsersScreen.following(login); - case 'people': - return GtUsersScreen.member(login); - case 'stars': - return GtReposScreen.star(login); - case 'repositories': - return GtReposScreen(login); - case 'orgrepo': - return GtReposScreen.org(login); - case 'organizations': - return GtOrgsScreen.ofUser(login); - default: - return GtUserScreen(login); - } - }); - static final repo = RouterScreen( - '/:owner/:name', - (context, parameters) => - GtRepoScreen(parameters['owner']!.first, parameters['name']!.first), - ); - static final object = RouterScreen( - '/:owner/:name/blob', - (context, parameters) => GtObjectScreen( - parameters['owner']!.first, - parameters['name']!.first, - path: parameters['path']?.first, + // bitbucket + GoRoute( + path: 'bitbucket', + builder: (context, state) => Home(), + routes: [ + GoRoute( + path: ':login', + builder: (context, state) => BbUserScreen( + state.params['login']!, + isTeam: state.queryParams['team']! == '1', + ), + ), + GoRoute( + path: ':owner/:name', + builder: (context, state) => BbRepoScreen( + state.params['owner']!, + state.params['name']!, + branch: state.params['branch'], + ), + routes: [ + GoRoute( + path: 'src/:ref', + builder: (context, state) => BbObjectScreen( + state.params['owner']!, + state.params['name']!, + state.params['ref']!, + path: state.queryParams['path'], + ), + ), + GoRoute( + path: 'commits/:ref', + builder: (context, state) => BbCommitsScreen( + state.params['owner']!, + state.params['name']!, + state.params['ref']!, + ), + ), + GoRoute( + path: 'issues', + builder: (context, state) => BbIssuesScreen( + state.params['owner']!, + state.params['name']!, + ), + routes: [ + GoRoute( + path: 'new', + builder: (context, state) => BbIssueFormScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: ':number', + builder: (context, state) { + return BbIssueScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + ); + }, + routes: [ + GoRoute( + path: 'comment', + builder: (context, state) { + return BbIssueCommentScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + ); + }, + ), + ], + ) + ], + ), + GoRoute( + path: 'pulls', + builder: (context, state) => BbPullsScreen( + state.params['owner']!, + state.params['name']!, + ), + ) + ], + ), + ], + ), + + // gitee + GoRoute( + path: 'gitee', + builder: (context, state) => Home(), + routes: [ + GoRoute( + path: ':login', + builder: (context, state) { + final login = state.params['login']!; + final tab = state.queryParams['tab']; + switch (tab) { + case 'followers': + return GeUsersScreen.followers(login); + case 'following': + return GeUsersScreen.following(login); + // case 'people': + case 'stars': + return GeReposScreen.star(login); + case 'repositories': + return GeReposScreen(login); + default: + return GeUserScreen(login); + } + }, + ), + GoRoute( + path: 'search', + builder: (context, state) => GeSearchScreen(), + ), + GoRoute( + path: ':owner/:name', + builder: (context, state) => GeRepoScreen( + state.params['owner']!, + state.params['name']!, + branch: state.queryParams['branch'], + ), + routes: [ + GoRoute( + path: 'stargazers', + builder: (context, state) => GeUsersScreen.stargazers( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'watchers', + builder: (context, state) => GeUsersScreen.watchers( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'forks', + builder: (context, state) => GeReposScreen.forks( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'blob/:sha', + builder: (context, state) => GeBlobScreen( + state.params['owner']!, + state.params['name']!, + state.params['sha']!, + state.params['path']!, + ), + ), + GoRoute( + path: 'tree/:sha', + builder: (context, state) => GeTreeScreen( + state.params['owner']!, + state.params['name']!, + state.params['sha']!, + ), + ), + GoRoute( + path: 'contributors', + builder: (context, state) => GeContributorsScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: 'commits', + builder: (context, state) => GeCommitsScreen( + state.params['owner']!, + state.params['name']!, + branch: state.queryParams['branch'], + ), + routes: [ + GoRoute( + path: ':sha', + builder: (context, state) => GeCommitScreen( + state.params['owner']!, + state.params['name']!, + state.params['sha']!, + ), + ) + ], + ), + GoRoute( + path: 'issues', + builder: (context, state) => GeIssuesScreen( + state.params['owner']!, + state.params['name']!, + ), + routes: [ + GoRoute( + path: 'new', + builder: (context, state) => GeIssueFormScreen( + state.params['owner']!, + state.params['name']!, + ), + ), + GoRoute( + path: ':number', + builder: (context, state) { + return GeIssueScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + ); + }, + routes: [ + GoRoute( + path: 'comment', + builder: (context, state) { + return GeIssueCommentScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + isPr: false, + body: state.queryParams['body']!, + id: state.queryParams['id']!, + ); + }, + ), + ], + ) + ], + ), + GoRoute( + path: 'pulls', + builder: (context, state) => GePullsScreen( + state.params['owner']!, + state.params['name']!, + isPr: true, + ), + routes: [ + GoRoute( + path: ':number', + builder: (context, state) { + return GeIssueScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + isPr: true, + ); + }, + routes: [ + GoRoute( + path: 'comment', + builder: (context, state) { + return GeIssueCommentScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + isPr: true, + body: state.queryParams['body']!, + id: state.queryParams['id']!, + ); + }, + ), + GoRoute( + path: 'files', + builder: (context, state) { + return GeFilesScreen( + state.params['owner']!, + state.params['name']!, + state.params['number']!, + ); + }, + ), + ], + ) + ], + ), + ], + ), + ], + ), + + // gogs + GoRoute( + path: 'gogs', + builder: (context, state) => Home(), + routes: [ + GoRoute( + path: ':login', + builder: (context, state) { + final login = state.params['login']!; + final tab = state.queryParams['tab']; + final isViewer = state.queryParams['isViewer']; + switch (tab) { + case 'followers': + return GoUsersScreen.followers(login); + case 'following': + return GoUsersScreen.following(login); + case 'repositories': + return GoReposScreen(login, + isViewer: isViewer == 'false' ? false : true); + case 'organizations': + return GoOrgsScreen.ofUser(login, + isViewer: isViewer == 'false' + ? false + : true); // handle better? + default: + return GoUserScreen(login); + } + }, + ), + GoRoute( + path: ':owner/:name', + builder: (context, state) => GoRepoScreen( + state.params['owner']!, + state.params['name']!, + branch: state.queryParams['branch'], + ), + routes: [ + GoRoute( + path: 'blob', + builder: (context, state) => GoObjectScreen( + state.params['owner']!, + state.params['name']!, + path: state.params['path'], + ref: state.params['ref'], + ), + ), + GoRoute( + path: 'commits', + builder: (context, state) => GoCommitsScreen( + state.params['owner']!, + state.params['name']!, + branch: state.queryParams['ref'], + ), + ), + GoRoute( + path: 'issues', + builder: (context, state) => GoIssuesScreen( + state.params['owner']!, + state.params['name']!, + ), + ) + ], + ), + ], + ), + ], ), - ); - static final stargazers = - RouterScreen('/:owner/:name/stargazers', (context, parameters) { - return GtUsersScreen.stargazers( - parameters['owner']!.first, parameters['name']!.first); - }); - static final watchers = - RouterScreen('/:owner/:name/watchers', (context, parameters) { - return GtUsersScreen.watchers( - parameters['owner']!.first, parameters['name']!.first); - }); - static final forks = - RouterScreen('/:owner/:name/forks', (context, parameters) { - return GtReposScreen.forks( - parameters['owner']!.first, parameters['name']!.first); - }); - static final commits = RouterScreen( - '/:owner/:name/commits', - (context, parameters) => GtCommitsScreen( - parameters['owner']!.first, parameters['name']!.first)); - static final issues = RouterScreen( - '/:owner/:name/issues', - (context, parameters) => GtIssuesScreen( - parameters['owner']!.first, parameters['name']!.first)); - static final pulls = RouterScreen( - '/:owner/:name/pulls', - (context, parameters) => GtIssuesScreen( - parameters['owner']!.first, parameters['name']!.first, - isPr: true)); - static final issueAdd = RouterScreen( - '/:owner/:name/issues/new', - (context, parameters) => GtIssueFormScreen( - parameters['owner']!.first, parameters['name']!.first)); - static final issue = RouterScreen( - '/:owner/:name/issues/:number', - (context, parameters) => GtIssueScreen(parameters['owner']!.first, - parameters['name']!.first, parameters['number']!.first)); - static final issueComment = RouterScreen( - '/:owner/:name/issues/:number/comment', - (context, parameters) => GtIssueCommentScreen(parameters['owner']!.first, - parameters['name']!.first, parameters['number']!.first, - body: parameters['body'] != null ? parameters['body']!.first : '', - id: parameters['id'] != null ? parameters['id']!.first : '')); -} - -class BitbucketRouter { - static const prefix = '/bitbucket'; - static final routes = [ - BitbucketRouter.user, - BitbucketRouter.repo, - BitbucketRouter.object, - BitbucketRouter.commits, - BitbucketRouter.issueAdd, - BitbucketRouter.issueComment, - BitbucketRouter.issue, - BitbucketRouter.issues, - BitbucketRouter.pulls, - ]; - static final user = RouterScreen( - '/:login', - (context, parameters) => BbUserScreen(parameters['login']!.first, - isTeam: parameters['team']!.first == '1')); - static final repo = RouterScreen('/:owner/:name', (context, parameters) { - if (parameters['branch'] == null) { - return BbRepoScreen( - parameters['owner']!.first, parameters['name']!.first); - } else { - return BbRepoScreen(parameters['owner']!.first, parameters['name']!.first, - branch: parameters['branch']!.first); - } - }); - static final object = RouterScreen( - '/:owner/:name/src/:ref', - (context, parameters) => BbObjectScreen( - parameters['owner']!.first, - parameters['name']!.first, - parameters['ref']!.first, - path: parameters['path']?.first, - ), - ); - static final issues = RouterScreen( - '/:owner/:name/issues', - (context, parameters) => BbIssuesScreen( - parameters['owner']!.first, parameters['name']!.first)); - static final commits = RouterScreen( - '/:owner/:name/commits/:ref', - (context, parameters) => BbCommitsScreen(parameters['owner']!.first, - parameters['name']!.first, parameters['ref']!.first)); - static final pulls = RouterScreen( - '/:owner/:name/pulls', - (context, parameters) => - BbPullsScreen(parameters['owner']!.first, parameters['name']!.first)); - static final issueAdd = RouterScreen( - '/:owner/:name/issues/new', - (context, parameters) => BbIssueFormScreen( - parameters['owner']!.first, parameters['name']!.first)); - static final issue = RouterScreen( - '/:owner/:name/issues/:number', - (context, parameters) => BbIssueScreen(parameters['owner']!.first, - parameters['name']!.first, parameters['number']!.first)); - static final issueComment = RouterScreen( - '/:owner/:name/issues/:number/comment', - (context, parameters) => BbIssueCommentScreen(parameters['owner']!.first, - parameters['name']!.first, parameters['number']!.first)); -} - -class GiteeRouter { - static const prefix = '/gitee'; - static final routes = [ - GiteeRouter.search, - GiteeRouter.user, - GiteeRouter.repo, - GiteeRouter.stargazers, - GiteeRouter.watchers, - GiteeRouter.forks, - GiteeRouter.commits, - GiteeRouter.tree, - GiteeRouter.blob, - GiteeRouter.issues, - GiteeRouter.pulls, - GiteeRouter.issueAdd, // issueAdd should be above issue - GiteeRouter.issue, // Due to similarity of uris - GiteeRouter.issueComment, - GiteeRouter.pull, - GiteeRouter.pullComment, - GiteeRouter.files, - GiteeRouter.commit, - GiteeRouter.contributors, - ]; - static final search = RouterScreen('/search', (context, parameters) { - return GeSearchScreen(); - }); - static final user = RouterScreen('/:login', (context, parameters) { - final login = parameters['login']!.first; - final tab = parameters['tab']?.first; - switch (tab) { - case 'followers': - return GeUsersScreen.followers(login); - case 'following': - return GeUsersScreen.following(login); - // case 'people': - case 'stars': - return GeReposScreen.star(login); - case 'repositories': - return GeReposScreen(login); - default: - return GeUserScreen(login); - } - }); - static final repo = RouterScreen( - '/:owner/:name', - (context, parameters) { - if (parameters['branch'] == null) { - return GeRepoScreen( - parameters['owner']!.first, parameters['name']!.first); - } else { - return GeRepoScreen( - parameters['owner']!.first, parameters['name']!.first, - branch: parameters['branch']!.first); - } - }, - ); - static final stargazers = - RouterScreen('/:owner/:name/stargazers', (context, parameters) { - return GeUsersScreen.stargazers( - parameters['owner']!.first, parameters['name']!.first); - }); - static final watchers = - RouterScreen('/:owner/:name/watchers', (context, parameters) { - return GeUsersScreen.watchers( - parameters['owner']!.first, parameters['name']!.first); - }); - static final forks = - RouterScreen('/:owner/:name/forks', (context, parameters) { - return GeReposScreen.forks( - parameters['owner']!.first, parameters['name']!.first); - }); - static final commits = RouterScreen( - '/:owner/:name/commits', - (context, parameters) => GeCommitsScreen( - parameters['owner']!.first, parameters['name']!.first, - branch: - parameters['branch'] != null ? parameters['branch']!.first : null), - ); - static final tree = RouterScreen( - '/:owner/:name/tree/:sha', - (context, parameters) { - return GeTreeScreen(parameters['owner']!.first, parameters['name']!.first, - parameters['sha']!.first); - }, - ); - static final blob = RouterScreen( - '/:owner/:name/blob/:sha', - (context, parameters) { - return GeBlobScreen( - parameters['owner']!.first, - parameters['name']!.first, - parameters['sha']!.first, - parameters['path']!.first, - ); - }, - ); - static final issues = RouterScreen( - '/:owner/:name/issues', - (context, parameters) { - return GeIssuesScreen( - parameters['owner']!.first, parameters['name']!.first, - isPr: false); - }, - ); - static final issue = - RouterScreen('/:owner/:name/issues/:number', (context, parameters) { - return GeIssueScreen(parameters['owner']!.first, parameters['name']!.first, - parameters['number']!.first, - isPr: false); - }); - static final pulls = RouterScreen( - '/:owner/:name/pulls', - (context, parameters) { - return GePullsScreen( - parameters['owner']!.first, parameters['name']!.first, - isPr: true); - }, - ); - static final issueAdd = - RouterScreen('/:owner/:name/issues/new', (context, parameters) { - return GeIssueFormScreen( - parameters['owner']!.first, parameters['name']!.first); - }); - static final issueComment = RouterScreen( - '/:owner/:name/issues/:number/comment', (context, parameters) { - return GeIssueCommentScreen( - parameters['owner']!.first, - parameters['name']!.first, - parameters['number']!.first, - isPr: false, - body: parameters['body'] != null ? parameters['body']!.first : '', - id: parameters['id'] != null ? parameters['id']!.first : '', - ); - }); - static final pull = RouterScreen( - '/:owner/:name/pulls/:number', - (context, parameters) { - return GePullScreen(parameters['owner']!.first, parameters['name']!.first, - parameters['number']!.first, - isPr: true); - }, - ); - static final pullComment = RouterScreen('/:owner/:name/pulls/:number/comment', - (context, parameters) { - return GeIssueCommentScreen( - parameters['owner']!.first, - parameters['name']!.first, - parameters['number']!.first, - isPr: true, - body: parameters['body'] != null ? parameters['body']!.first : '', - id: parameters['id'] != null ? parameters['id']!.first : '', - ); - }); - static final files = - RouterScreen('/:owner/:name/pulls/:number/files', (context, parameters) { - return GeFilesScreen(parameters['owner']!.first, parameters['name']!.first, - parameters['number']!.first); - }); - static final commit = RouterScreen( - '/:owner/:name/commits/:sha', - (context, parameters) => GeCommitScreen(parameters['owner']!.first, - parameters['name']!.first, parameters['sha']!.first), - ); - static final contributors = RouterScreen( - '/:owner/:name/contributors', - (context, parameters) => GeContributorsScreen( - parameters['owner']!.first, parameters['name']!.first), - ); -} - -class GogsRouter { - static const prefix = '/gogs'; - static final routes = [ - GogsRouter.user, - GogsRouter.repo, - GogsRouter.object, - GogsRouter.commits, - GogsRouter.issues, - ]; - static final user = RouterScreen('/:login', (context, parameters) { - final login = parameters['login']!.first; - final tab = parameters['tab']?.first; - final isViewer = parameters['isViewer']?.first; - switch (tab) { - case 'followers': - return GoUsersScreen.followers(login); - case 'following': - return GoUsersScreen.following(login); - case 'repositories': - return GoReposScreen(login, - isViewer: isViewer == 'false' ? false : true); - case 'organizations': - return GoOrgsScreen.ofUser(login, - isViewer: isViewer == 'false' ? false : true); // handle better? - default: - return GoUserScreen(parameters['login']!.first); - } - }); - static final repo = RouterScreen( - '/:owner/:name', - (context, parameters) { - if (parameters['branch'] == null) { - return GoRepoScreen( - parameters['owner']!.first, parameters['name']!.first); - } else { - return GoRepoScreen( - parameters['owner']!.first, parameters['name']!.first, - branch: parameters['branch']!.first); - } - }, - ); - static final object = RouterScreen( - '/:owner/:name/blob', - (context, parameters) => GoObjectScreen( - parameters['owner']!.first, - parameters['name']!.first, - path: parameters['path']?.first, - ref: parameters['ref']?.first, - ), - ); - static final commits = RouterScreen( - '/:owner/:name/commits', - (context, parameters) => GoCommitsScreen( - parameters['owner']!.first, parameters['name']!.first, - branch: parameters['ref']?.first)); - static final issues = RouterScreen( - '/:owner/:name/issues', - (context, parameters) => GoIssuesScreen( - parameters['owner']!.first, parameters['name']!.first)); -} + ], +); diff --git a/lib/screens/gh_gists_files.dart b/lib/screens/gh_gists_files.dart index b5d60bc..b246a61 100644 --- a/lib/screens/gh_gists_files.dart +++ b/lib/screens/gh_gists_files.dart @@ -1,16 +1,16 @@ import 'package:ferry/ferry.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/S.dart'; import 'package:git_touch/graphql/__generated__/github.data.gql.dart'; import 'package:git_touch/graphql/__generated__/github.req.gql.dart'; import 'package:git_touch/graphql/__generated__/github.var.gql.dart'; +import 'package:git_touch/models/auth.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/widgets/object_tree.dart'; import 'package:git_touch/widgets/table_view.dart'; import 'package:provider/provider.dart'; -import 'package:git_touch/models/auth.dart'; -import 'package:flutter_gen/gen_l10n/S.dart'; class GhGistsFilesScreen extends StatelessWidget { final String id; diff --git a/pubspec.lock b/pubspec.lock index bee76a2..12ac7fc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -260,13 +260,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.1" - fluro: - dependency: "direct main" - description: - name: fluro - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.3" flutter: dependency: "direct main" description: flutter @@ -350,6 +343,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" + go_router: + dependency: "direct main" + description: + name: go_router + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.1" google_fonts: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index f038666..e18f52c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,7 +37,6 @@ dependencies: file_icon: filesize: fimber: - fluro: flutter_highlight: flutter_markdown: flutter_svg: @@ -67,6 +66,7 @@ dependencies: sentry_flutter: pub_semver: google_fonts: + go_router: dev_dependencies: flutter_test: