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_entry.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/entry_item.dart';
import 'package:git_touch/widgets/mutation_button.dart';
@ -155,16 +156,34 @@ class _User extends StatelessWidget {
],
),
CommonStyle.verticalGap,
AntList(
children: [
AntListItem(
prefix: const Icon(Octicons.organization),
extra: Text(p.organizations.totalCount.toString()),
onClick: () {
context.push('/github/${p.login}?tab=organizations');
},
child: Text(AppLocalizations.of(context)!.organizations),
if (p.organizations.totalCount > 0)
AntList(
header: Text(
'${AppLocalizations.of(context)!.organizations} (${p.organizations.totalCount})',
),
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(
prefix: const Icon(Octicons.repo),
extra: Text(p.repositories.totalCount.toString()),

View File

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

View File

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

View File

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