mirror of
https://github.com/pd4d10/git-touch.git
synced 2026-03-12 10:14:22 -05:00
feat(gitee): repos screen
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
49
lib/screens/ge_repos.dart
Normal 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}',
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user