Skip to content

Commit

Permalink
feat(gitee): add tree screen
Browse files Browse the repository at this point in the history
  • Loading branch information
pd4d10 committed Nov 1, 2020
1 parent 5f0dfd7 commit 6870aa6
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 2 deletions.
12 changes: 12 additions & 0 deletions lib/models/gitee.dart
Expand Up @@ -50,6 +50,7 @@ class GiteeRepo {
String homepage;
int openIssuesCount;
bool pullRequestsEnabled;
String defaultBranch;
GiteeRepo();
factory GiteeRepo.fromJson(Map<String, dynamic> json) =>
_$GiteeRepoFromJson(json);
Expand Down Expand Up @@ -102,3 +103,14 @@ class GiteeCommitAuthor {
factory GiteeCommitAuthor.fromJson(Map<String, dynamic> json) =>
_$GiteeCommitAuthorFromJson(json);
}

@JsonSerializable(fieldRename: FieldRename.snake)
class GiteeTreeItem {
String path;
String type;
String sha;
int size;
GiteeTreeItem();
factory GiteeTreeItem.fromJson(Map<String, dynamic> json) =>
_$GiteeTreeItemFromJson(json);
}
20 changes: 19 additions & 1 deletion lib/models/gitee.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions lib/router.dart
Expand Up @@ -9,6 +9,7 @@ import 'package:git_touch/screens/code_theme.dart';
import 'package:git_touch/screens/ge_commits.dart';
import 'package:git_touch/screens/ge_repo.dart';
import 'package:git_touch/screens/ge_repos.dart';
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';
Expand Down Expand Up @@ -386,6 +387,7 @@ class GiteeRouter {
GiteeRouter.watchers,
GiteeRouter.forks,
GiteeRouter.commits,
GiteeRouter.tree,
];
static final user = RouterScreen('/:login', (context, p) {
final login = p['login'].first;
Expand Down Expand Up @@ -422,4 +424,11 @@ class GiteeRouter {
'/:owner/:name/commits',
(_, p) => GeCommitsScreen(p['owner'].first, p['name'].first),
);
static final tree = RouterScreen(
'/:owner/:name/tree/:sha',
(context, parameters) {
return GeTreeScreen(parameters['owner'].first, parameters['name'].first,
parameters['sha'].first);
},
);
}
2 changes: 1 addition & 1 deletion lib/screens/ge_repo.dart
Expand Up @@ -73,7 +73,7 @@ class GeRepoScreen extends StatelessWidget {
leftIconData: Octicons.code,
text: Text('Code'),
rightWidget: Text(p.license ?? ''),
url: '/gitee/$owner/$name/blob',
url: '/gitee/$owner/$name/tree/${p.defaultBranch}',
),
TableViewItem(
leftIconData: Octicons.issue_opened,
Expand Down
56 changes: 56 additions & 0 deletions lib/screens/ge_tree.dart
@@ -0,0 +1,56 @@
import 'package:flutter/cupertino.dart';
import 'package:git_touch/models/gitee.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/object_tree.dart';
import 'package:flutter/material.dart';
import 'package:git_touch/models/auth.dart';
import 'package:provider/provider.dart';

class GeTreeScreen extends StatelessWidget {
final String owner;
final String name;
final String sha;
GeTreeScreen(this.owner, this.name, this.sha);

@override
Widget build(BuildContext context) {
return RefreshStatefulScaffold<List<GiteeTreeItem>>(
title: AppBarTitle('Files'),
fetch: () async {
final res = await context
.read<AuthModel>()
.fetchGitee('/repos/$owner/$name/git/trees/$sha');
final items = [for (var v in res['tree']) GiteeTreeItem.fromJson(v)];
items.sort((a, b) {
return sortByKey('tree', a.type, b.type);
});
return items;
},
bodyBuilder: (data, _) {
return ObjectTree(
items: [
for (var item in data)
ObjectTreeItem(
type: item.type,
name: item.path,
size: item.size,
downloadUrl: '', // TODO:
url: (() {
switch (item.type) {
case 'tree':
return '/gitee/$owner/$name/tree/${item.sha}';
case 'blob':
return '/gitee/$owner/$name/blob/${item.sha}';
default:
return null;
}
})(),
)
],
);
},
);
}
}

0 comments on commit 6870aa6

Please sign in to comment.