feat(gitee): repos screen

This commit is contained in:
Rongjian Zhang
2020-10-17 18:09:36 +08:00
parent b5a19486dd
commit 2e1d869aa1
3 changed files with 89 additions and 4 deletions

View File

@@ -266,6 +266,30 @@ class AuthModel with ChangeNotifier {
return info;
}
Future<DataWithPage> fetchGiteeWithPage(String path,
{int page, int limit}) async {
page = page ?? 1;
limit = limit ?? pageSize;
var uri = Uri.parse('${activeAccount.domain}/api/v5$path');
uri = uri.replace(
queryParameters: {
'page': page.toString(),
'per_page': limit.toString(),
...uri.queryParameters,
},
);
final res = await http.get(uri, headers: {'Authorization': 'token $token'});
final info = json.decode(utf8.decode(res.bodyBytes));
return DataWithPage(
data: info,
cursor: page + 1,
hasMore: int.tryParse(res.headers['total_page']) > page,
total: int.tryParse(res.headers['total_count'] ?? ''),
);
}
Future loginToBb(String domain, String username, String appPassword) async {
domain = domain.trim();
username = username.trim();

View File

@@ -6,6 +6,7 @@ import 'package:git_touch/screens/bb_issues.dart';
import 'package:git_touch/screens/bb_pulls.dart';
import 'package:git_touch/screens/bb_user.dart';
import 'package:git_touch/screens/code_theme.dart';
import 'package:git_touch/screens/ge_repos.dart';
import 'package:git_touch/screens/ge_user.dart';
import 'package:git_touch/screens/gh_commits.dart';
import 'package:git_touch/screens/gh_contributors.dart';
@@ -378,8 +379,19 @@ class GiteeRouter {
static final routes = [
GiteeRouter.user,
];
static final user = RouterScreen(
'/:login',
(context, params) => GeUserScreen(params['login'].first),
);
static final user = RouterScreen('/:login', (context, p) {
final login = p['login'].first;
final tab = p['tab']?.first;
switch (tab) {
case 'followers': //
case 'following': //
case 'people': //
case 'stars':
return GeReposScreen.star(login);
case 'repositories':
return GeReposScreen(login);
default:
return GeUserScreen(login);
}
});
}

49
lib/screens/ge_repos.dart Normal file
View File

@@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:git_touch/models/gitee.dart';
import 'package:git_touch/scaffolds/list_stateful.dart';
import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/models/auth.dart';
import 'package:provider/provider.dart';
import 'package:git_touch/widgets/repository_item.dart';
import 'package:timeago/timeago.dart' as timeago;
class GeReposScreen extends StatelessWidget {
final String api;
final String title;
GeReposScreen(String owner)
: api = '/users/$owner/repos',
title = 'Repositories';
GeReposScreen.star(String owner)
: api = '/users/$owner/starred',
title = 'Stars';
@override
Widget build(BuildContext context) {
return ListStatefulScaffold<GiteeRepo, int>(
title: AppBarTitle(title),
fetch: (page) async {
final res =
await context.read<AuthModel>().fetchGiteeWithPage(api, page: page);
return ListPayload(
cursor: res.cursor,
hasMore: res.hasMore,
items: [for (var v in res.data) GiteeRepo.fromJson(v)],
);
},
itemBuilder: (v) {
return RepositoryItem(
owner: v.owner.login,
avatarUrl: v.owner.avatarUrl,
name: v.path,
description: v.description,
starCount: v.stargazersCount,
forkCount: v.forksCount,
note: 'Updated ${timeago.format(v.updatedAt)}',
url: '/gitea/${v.owner.login}/${v.path}',
avatarLink: '/gitea/${v.owner.login}',
);
},
);
}
}