1
0
mirror of https://github.com/git-touch/git-touch synced 2025-03-22 14:10:18 +01:00

feat: gitlab screen routers

This commit is contained in:
Rongjian Zhang 2019-12-15 00:08:12 +08:00
parent 5ca9f98978
commit 6bff2b44b6
7 changed files with 34 additions and 10 deletions

View File

@ -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<Home> {
}
_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) {

View File

@ -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) {

View File

@ -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)));

View File

@ -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(

View File

@ -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(

View File

@ -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<Iterable<GitlabTreeItem>>(
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;
}

View File

@ -1,4 +1,8 @@
extension MyString<T extends String> on String {
int get toInt {
return int.parse(this);
}
String get urlencode {
return Uri.encodeComponent(this);
}