feat(github): refine user screen organizations
This commit is contained in:
parent
633b58d36f
commit
a1182ed6a5
|
@ -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()),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -43,6 +43,7 @@ class EntryItem extends StatelessWidget {
|
|||
fontSize: 14,
|
||||
color: theme.colorTextSecondary,
|
||||
fontWeight: FontWeight.w500,
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
)
|
||||
],
|
||||
|
|
|
@ -51,8 +51,12 @@ fragment UserParts on User {
|
|||
}
|
||||
}
|
||||
}
|
||||
organizations {
|
||||
organizations(first: 10) {
|
||||
totalCount
|
||||
nodes {
|
||||
login
|
||||
avatarUrl
|
||||
}
|
||||
}
|
||||
repositories(
|
||||
first: 6
|
||||
|
|
Loading…
Reference in New Issue