mirror of
https://github.com/git-touch/git-touch
synced 2025-03-05 19:57:42 +01:00
feat(gitee): add tree screen
This commit is contained in:
parent
5f0dfd7600
commit
6870aa6ff1
@ -50,6 +50,7 @@ class GiteeRepo {
|
|||||||
String homepage;
|
String homepage;
|
||||||
int openIssuesCount;
|
int openIssuesCount;
|
||||||
bool pullRequestsEnabled;
|
bool pullRequestsEnabled;
|
||||||
|
String defaultBranch;
|
||||||
GiteeRepo();
|
GiteeRepo();
|
||||||
factory GiteeRepo.fromJson(Map<String, dynamic> json) =>
|
factory GiteeRepo.fromJson(Map<String, dynamic> json) =>
|
||||||
_$GiteeRepoFromJson(json);
|
_$GiteeRepoFromJson(json);
|
||||||
@ -102,3 +103,14 @@ class GiteeCommitAuthor {
|
|||||||
factory GiteeCommitAuthor.fromJson(Map<String, dynamic> json) =>
|
factory GiteeCommitAuthor.fromJson(Map<String, dynamic> json) =>
|
||||||
_$GiteeCommitAuthorFromJson(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);
|
||||||
|
}
|
||||||
|
@ -78,7 +78,8 @@ GiteeRepo _$GiteeRepoFromJson(Map<String, dynamic> json) {
|
|||||||
..license = json['license'] as String
|
..license = json['license'] as String
|
||||||
..homepage = json['homepage'] as String
|
..homepage = json['homepage'] as String
|
||||||
..openIssuesCount = json['open_issues_count'] as int
|
..openIssuesCount = json['open_issues_count'] as int
|
||||||
..pullRequestsEnabled = json['pull_requests_enabled'] as bool;
|
..pullRequestsEnabled = json['pull_requests_enabled'] as bool
|
||||||
|
..defaultBranch = json['default_branch'] as String;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> _$GiteeRepoToJson(GiteeRepo instance) => <String, dynamic>{
|
Map<String, dynamic> _$GiteeRepoToJson(GiteeRepo instance) => <String, dynamic>{
|
||||||
@ -98,6 +99,7 @@ Map<String, dynamic> _$GiteeRepoToJson(GiteeRepo instance) => <String, dynamic>{
|
|||||||
'homepage': instance.homepage,
|
'homepage': instance.homepage,
|
||||||
'open_issues_count': instance.openIssuesCount,
|
'open_issues_count': instance.openIssuesCount,
|
||||||
'pull_requests_enabled': instance.pullRequestsEnabled,
|
'pull_requests_enabled': instance.pullRequestsEnabled,
|
||||||
|
'default_branch': instance.defaultBranch,
|
||||||
};
|
};
|
||||||
|
|
||||||
GiteeRepoOwner _$GiteeRepoOwnerFromJson(Map<String, dynamic> json) {
|
GiteeRepoOwner _$GiteeRepoOwnerFromJson(Map<String, dynamic> json) {
|
||||||
@ -173,3 +175,19 @@ Map<String, dynamic> _$GiteeCommitAuthorToJson(GiteeCommitAuthor instance) =>
|
|||||||
'email': instance.email,
|
'email': instance.email,
|
||||||
'date': instance.date?.toIso8601String(),
|
'date': instance.date?.toIso8601String(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GiteeTreeItem _$GiteeTreeItemFromJson(Map<String, dynamic> json) {
|
||||||
|
return GiteeTreeItem()
|
||||||
|
..path = json['path'] as String
|
||||||
|
..type = json['type'] as String
|
||||||
|
..sha = json['sha'] as String
|
||||||
|
..size = json['size'] as int;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> _$GiteeTreeItemToJson(GiteeTreeItem instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'path': instance.path,
|
||||||
|
'type': instance.type,
|
||||||
|
'sha': instance.sha,
|
||||||
|
'size': instance.size,
|
||||||
|
};
|
||||||
|
@ -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_commits.dart';
|
||||||
import 'package:git_touch/screens/ge_repo.dart';
|
import 'package:git_touch/screens/ge_repo.dart';
|
||||||
import 'package:git_touch/screens/ge_repos.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_user.dart';
|
||||||
import 'package:git_touch/screens/ge_users.dart';
|
import 'package:git_touch/screens/ge_users.dart';
|
||||||
import 'package:git_touch/screens/gh_commits.dart';
|
import 'package:git_touch/screens/gh_commits.dart';
|
||||||
@ -386,6 +387,7 @@ class GiteeRouter {
|
|||||||
GiteeRouter.watchers,
|
GiteeRouter.watchers,
|
||||||
GiteeRouter.forks,
|
GiteeRouter.forks,
|
||||||
GiteeRouter.commits,
|
GiteeRouter.commits,
|
||||||
|
GiteeRouter.tree,
|
||||||
];
|
];
|
||||||
static final user = RouterScreen('/:login', (context, p) {
|
static final user = RouterScreen('/:login', (context, p) {
|
||||||
final login = p['login'].first;
|
final login = p['login'].first;
|
||||||
@ -422,4 +424,11 @@ class GiteeRouter {
|
|||||||
'/:owner/:name/commits',
|
'/:owner/:name/commits',
|
||||||
(_, p) => GeCommitsScreen(p['owner'].first, p['name'].first),
|
(_, 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);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ class GeRepoScreen extends StatelessWidget {
|
|||||||
leftIconData: Octicons.code,
|
leftIconData: Octicons.code,
|
||||||
text: Text('Code'),
|
text: Text('Code'),
|
||||||
rightWidget: Text(p.license ?? ''),
|
rightWidget: Text(p.license ?? ''),
|
||||||
url: '/gitee/$owner/$name/blob',
|
url: '/gitee/$owner/$name/tree/${p.defaultBranch}',
|
||||||
),
|
),
|
||||||
TableViewItem(
|
TableViewItem(
|
||||||
leftIconData: Octicons.issue_opened,
|
leftIconData: Octicons.issue_opened,
|
||||||
|
56
lib/screens/ge_tree.dart
Normal file
56
lib/screens/ge_tree.dart
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
})(),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user