feat(gitee): users screen
This commit is contained in:
parent
2e1d869aa1
commit
a5d64fdb86
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue