feat(github): refine user screen organizations

This commit is contained in:
Rongjian Zhang 2022-10-04 20:56:53 +08:00
parent 633b58d36f
commit a1182ed6a5
4 changed files with 37 additions and 13 deletions

View File

@ -8,6 +8,7 @@ import 'package:git_touch/utils/utils.dart';
import 'package:git_touch/widgets/action_button.dart'; import 'package:git_touch/widgets/action_button.dart';
import 'package:git_touch/widgets/action_entry.dart'; import 'package:git_touch/widgets/action_entry.dart';
import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/avatar.dart';
import 'package:git_touch/widgets/contribution.dart'; import 'package:git_touch/widgets/contribution.dart';
import 'package:git_touch/widgets/entry_item.dart'; import 'package:git_touch/widgets/entry_item.dart';
import 'package:git_touch/widgets/mutation_button.dart'; import 'package:git_touch/widgets/mutation_button.dart';
@ -155,16 +156,34 @@ class _User extends StatelessWidget {
], ],
), ),
CommonStyle.verticalGap, CommonStyle.verticalGap,
AntList( if (p.organizations.totalCount > 0)
children: [ AntList(
AntListItem( header: Text(
prefix: const Icon(Octicons.organization), '${AppLocalizations.of(context)!.organizations} (${p.organizations.totalCount})',
extra: Text(p.organizations.totalCount.toString()),
onClick: () {
context.push('/github/${p.login}?tab=organizations');
},
child: Text(AppLocalizations.of(context)!.organizations),
), ),
children: [
AntListItem(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Wrap(
spacing: 8,
children: [
for (final org in p.organizations.nodes!)
Avatar(
isOrg: true,
url: org.avatarUrl,
linkUrl: '/github/${org.login}',
),
],
),
),
),
],
),
CommonStyle.verticalGap,
AntList(
header: const Text('Overview'),
children: [
AntListItem( AntListItem(
prefix: const Icon(Octicons.repo), prefix: const Icon(Octicons.repo),
extra: Text(p.repositories.totalCount.toString()), extra: Text(p.repositories.totalCount.toString()),

View File

@ -18,12 +18,12 @@ class Avatar extends StatelessWidget {
required this.url, required this.url,
this.size = AvatarSize.medium, this.size = AvatarSize.medium,
this.linkUrl, this.linkUrl,
this.borderRadius, this.isOrg = false,
}); });
final String? url; final String? url;
final double size; final double size;
final String? linkUrl; final String? linkUrl;
final BorderRadius? borderRadius; final bool isOrg;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -35,7 +35,7 @@ class Avatar extends StatelessWidget {
final fallbackWidget = Image.asset(fallback, width: size, height: size); final fallbackWidget = Image.asset(fallback, width: size, height: size);
final widget = ClipRRect( final widget = ClipRRect(
borderRadius: borderRadius ?? BorderRadius.circular(size / 2), borderRadius: BorderRadius.circular(isOrg ? 6 : size),
child: url == null child: url == null
? fallbackWidget ? fallbackWidget
: FadeInImage.assetNetwork( : FadeInImage.assetNetwork(

View File

@ -43,6 +43,7 @@ class EntryItem extends StatelessWidget {
fontSize: 14, fontSize: 14,
color: theme.colorTextSecondary, color: theme.colorTextSecondary,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// overflow: TextOverflow.ellipsis,
), ),
) )
], ],

View File

@ -51,8 +51,12 @@ fragment UserParts on User {
} }
} }
} }
organizations { organizations(first: 10) {
totalCount totalCount
nodes {
login
avatarUrl
}
} }
repositories( repositories(
first: 6 first: 6