feat(gitee): users screen

This commit is contained in:
Rongjian Zhang 2020-10-17 18:18:26 +08:00
parent 2e1d869aa1
commit a5d64fdb86
5 changed files with 92 additions and 3 deletions

View File

@ -21,6 +21,17 @@ class GiteeUser {
_$GiteeUserFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class GiteeListUser {
String login;
String avatarUrl;
String name;
String htmlUrl;
GiteeListUser();
factory GiteeListUser.fromJson(Map<String, dynamic> json) =>
_$GiteeListUserFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class GiteeRepo {
GiteeRepoOwner owner;

View File

@ -39,6 +39,22 @@ Map<String, dynamic> _$GiteeUserToJson(GiteeUser instance) => <String, dynamic>{
'created_at': instance.createdAt?.toIso8601String(),
};
GiteeListUser _$GiteeListUserFromJson(Map<String, dynamic> json) {
return GiteeListUser()
..login = json['login'] as String
..avatarUrl = json['avatar_url'] as String
..name = json['name'] as String
..htmlUrl = json['html_url'] as String;
}
Map<String, dynamic> _$GiteeListUserToJson(GiteeListUser instance) =>
<String, dynamic>{
'login': instance.login,
'avatar_url': instance.avatarUrl,
'name': instance.name,
'html_url': instance.htmlUrl,
};
GiteeRepo _$GiteeRepoFromJson(Map<String, dynamic> json) {
return GiteeRepo()
..owner = json['owner'] == null

View File

@ -8,6 +8,7 @@ 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/ge_users.dart';
import 'package:git_touch/screens/gh_commits.dart';
import 'package:git_touch/screens/gh_contributors.dart';
import 'package:git_touch/screens/gh_events.dart';
@ -383,9 +384,11 @@ class GiteeRouter {
final login = p['login'].first;
final tab = p['tab']?.first;
switch (tab) {
case 'followers': //
case 'following': //
case 'people': //
case 'followers':
return GeUsersScreen.followers(login);
case 'following':
return GeUsersScreen.following(login);
// case 'people':
case 'stars':
return GeReposScreen.star(login);
case 'repositories':

52
lib/screens/ge_users.dart Normal file
View File

@ -0,0 +1,52 @@
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/widgets/user_item.dart';
import 'package:git_touch/models/auth.dart';
import 'package:provider/provider.dart';
class GeUsersScreen extends StatelessWidget {
final String api;
final String title;
GeUsersScreen.followers(String login)
: api = '/users/$login/followers',
title = 'Followers';
GeUsersScreen.following(String login)
: api = '/users/$login/following',
title = "Following";
// GeUsersScreen.member(String login)
// : api = '/orgs/$login/members',
// title = "Members";
GeUsersScreen.stargazers(String owner, String repo)
: api = '/repos/$owner/$repo/stargazers',
title = 'Stargazers';
GeUsersScreen.watchers(String owner, String repo)
: api = '/repos/$owner/$repo/subscribers',
title = 'Watchers';
@override
Widget build(BuildContext context) {
return ListStatefulScaffold<GiteeListUser, 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) GiteeListUser.fromJson(v)],
);
},
itemBuilder: (p) {
return UserItem.gitee(
login: p.login,
name: p.name,
avatarUrl: p.avatarUrl,
bio: Text(p.htmlUrl),
);
},
);
}
}

View File

@ -49,6 +49,13 @@ class UserItem extends StatelessWidget {
@required this.bio,
}) : url = '/gitea/$login';
UserItem.gitee({
@required this.login,
@required this.name,
@required this.avatarUrl,
@required this.bio,
}) : url = '/gitee/$login';
UserItem.bitbucket({
@required this.login,
@required this.name,