Skip to content

Commit a5d64fd

Browse files
committed
feat(gitee): users screen
1 parent 2e1d869 commit a5d64fd

File tree

5 files changed

+92
-3
lines changed

5 files changed

+92
-3
lines changed

lib/models/gitee.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@ class GiteeUser {
2121
_$GiteeUserFromJson(json);
2222
}
2323

24+
@JsonSerializable(fieldRename: FieldRename.snake)
25+
class GiteeListUser {
26+
String login;
27+
String avatarUrl;
28+
String name;
29+
String htmlUrl;
30+
GiteeListUser();
31+
factory GiteeListUser.fromJson(Map<String, dynamic> json) =>
32+
_$GiteeListUserFromJson(json);
33+
}
34+
2435
@JsonSerializable(fieldRename: FieldRename.snake)
2536
class GiteeRepo {
2637
GiteeRepoOwner owner;

lib/models/gitee.g.dart

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/router.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:git_touch/screens/bb_user.dart';
88
import 'package:git_touch/screens/code_theme.dart';
99
import 'package:git_touch/screens/ge_repos.dart';
1010
import 'package:git_touch/screens/ge_user.dart';
11+
import 'package:git_touch/screens/ge_users.dart';
1112
import 'package:git_touch/screens/gh_commits.dart';
1213
import 'package:git_touch/screens/gh_contributors.dart';
1314
import 'package:git_touch/screens/gh_events.dart';
@@ -383,9 +384,11 @@ class GiteeRouter {
383384
final login = p['login'].first;
384385
final tab = p['tab']?.first;
385386
switch (tab) {
386-
case 'followers': //
387-
case 'following': //
388-
case 'people': //
387+
case 'followers':
388+
return GeUsersScreen.followers(login);
389+
case 'following':
390+
return GeUsersScreen.following(login);
391+
// case 'people':
389392
case 'stars':
390393
return GeReposScreen.star(login);
391394
case 'repositories':

lib/screens/ge_users.dart

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:git_touch/models/gitee.dart';
3+
import 'package:git_touch/scaffolds/list_stateful.dart';
4+
import 'package:git_touch/widgets/app_bar_title.dart';
5+
import 'package:git_touch/widgets/user_item.dart';
6+
import 'package:git_touch/models/auth.dart';
7+
import 'package:provider/provider.dart';
8+
9+
class GeUsersScreen extends StatelessWidget {
10+
final String api;
11+
final String title;
12+
13+
GeUsersScreen.followers(String login)
14+
: api = '/users/$login/followers',
15+
title = 'Followers';
16+
GeUsersScreen.following(String login)
17+
: api = '/users/$login/following',
18+
title = "Following";
19+
// GeUsersScreen.member(String login)
20+
// : api = '/orgs/$login/members',
21+
// title = "Members";
22+
GeUsersScreen.stargazers(String owner, String repo)
23+
: api = '/repos/$owner/$repo/stargazers',
24+
title = 'Stargazers';
25+
GeUsersScreen.watchers(String owner, String repo)
26+
: api = '/repos/$owner/$repo/subscribers',
27+
title = 'Watchers';
28+
29+
@override
30+
Widget build(BuildContext context) {
31+
return ListStatefulScaffold<GiteeListUser, int>(
32+
title: AppBarTitle(title),
33+
fetch: (page) async {
34+
final res =
35+
await context.read<AuthModel>().fetchGiteeWithPage(api, page: page);
36+
return ListPayload(
37+
cursor: res.cursor,
38+
hasMore: res.hasMore,
39+
items: [for (var v in res.data) GiteeListUser.fromJson(v)],
40+
);
41+
},
42+
itemBuilder: (p) {
43+
return UserItem.gitee(
44+
login: p.login,
45+
name: p.name,
46+
avatarUrl: p.avatarUrl,
47+
bio: Text(p.htmlUrl),
48+
);
49+
},
50+
);
51+
}
52+
}

lib/widgets/user_item.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ class UserItem extends StatelessWidget {
4949
@required this.bio,
5050
}) : url = '/gitea/$login';
5151

52+
UserItem.gitee({
53+
@required this.login,
54+
@required this.name,
55+
@required this.avatarUrl,
56+
@required this.bio,
57+
}) : url = '/gitee/$login';
58+
5259
UserItem.bitbucket({
5360
@required this.login,
5461
@required this.name,

0 commit comments

Comments
 (0)