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:
parent
5ca9f98978
commit
6bff2b44b6
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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)));
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user