diff --git a/lib/screens/gh_user.dart b/lib/screens/gh_user.dart index d8fea13..1f946b0 100644 --- a/lib/screens/gh_user.dart +++ b/lib/screens/gh_user.dart @@ -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()), diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart index d8203aa..85aa6f9 100644 --- a/lib/widgets/avatar.dart +++ b/lib/widgets/avatar.dart @@ -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( diff --git a/lib/widgets/entry_item.dart b/lib/widgets/entry_item.dart index 99baa88..0aed05a 100644 --- a/lib/widgets/entry_item.dart +++ b/lib/widgets/entry_item.dart @@ -43,6 +43,7 @@ class EntryItem extends StatelessWidget { fontSize: 14, color: theme.colorTextSecondary, fontWeight: FontWeight.w500, + // overflow: TextOverflow.ellipsis, ), ) ], diff --git a/packages/gql_github/lib/user.graphql b/packages/gql_github/lib/user.graphql index 9756090..173f448 100644 --- a/packages/gql_github/lib/user.graphql +++ b/packages/gql_github/lib/user.graphql @@ -51,8 +51,12 @@ fragment UserParts on User { } } } - organizations { + organizations(first: 10) { totalCount + nodes { + login + avatarUrl + } } repositories( first: 6