diff --git a/lib/screens/bb_teams.dart b/lib/screens/bb_teams.dart index 3ed158c..673609f 100644 --- a/lib/screens/bb_teams.dart +++ b/lib/screens/bb_teams.dart @@ -25,9 +25,9 @@ class BbTeamsScreen extends StatelessWidget { ); }, itemBuilder: (v) { - return UserItem( + return UserItem.bitbucket( login: v.username, - url: '/bitbucket/${v.username}?team=1', + name: v.nickname, avatarUrl: v.avatarUrl, bio: Text('Created ${timeago.format(v.createdOn)}'), ); diff --git a/lib/screens/gh_orgs.dart b/lib/screens/gh_orgs.dart index d2757e1..be5b931 100644 --- a/lib/screens/gh_orgs.dart +++ b/lib/screens/gh_orgs.dart @@ -31,9 +31,10 @@ class GhUserOrganizationScreen extends StatelessWidget { ); }, itemBuilder: (v) { - return UserItem.gh( + return UserItem.github( avatarUrl: v.avatarUrl, login: v.login, + name: null, // TODO: organization name bio: v.description == null ? null : Text(v.description), ); }, diff --git a/lib/screens/gh_search.dart b/lib/screens/gh_search.dart index 50b8422..d825400 100644 --- a/lib/screens/gh_search.dart +++ b/lib/screens/gh_search.dart @@ -185,9 +185,9 @@ class _GhSearchScreenState extends State { isFork: p['isFork'], ); case 1: - return UserItem.gh( + return UserItem.github( login: p['login'], - // name: p['name'], + name: p['name'], avatarUrl: p['avatarUrl'], bio: Text(p['bio'] ?? ''), ); diff --git a/lib/screens/gh_trending.dart b/lib/screens/gh_trending.dart index 5153312..00e5970 100644 --- a/lib/screens/gh_trending.dart +++ b/lib/screens/gh_trending.dart @@ -48,9 +48,9 @@ class GhTrendingScreen extends StatelessWidget { ] : [ for (var v in payload.cast()) - UserItem.gh( + UserItem.github( login: v.username, - // name: v.name, + name: v.name, avatarUrl: v.avatar, bio: v.repo == null ? null diff --git a/lib/screens/gh_users.dart b/lib/screens/gh_users.dart index 055bf1b..9b6db30 100644 --- a/lib/screens/gh_users.dart +++ b/lib/screens/gh_users.dart @@ -142,9 +142,9 @@ class GhUsersScreen extends StatelessWidget { } }, itemBuilder: (payload) { - return UserItem.gh( + return UserItem.github( login: payload.login, - // name: payload.name, + name: payload.name, avatarUrl: payload.avatarUrl, bio: _buildBio( context, payload.company, payload.location, payload.createdAt), diff --git a/lib/screens/gl_groups.dart b/lib/screens/gl_groups.dart index 6cacede..cb2342a 100644 --- a/lib/screens/gl_groups.dart +++ b/lib/screens/gl_groups.dart @@ -24,11 +24,12 @@ class GlGroupsScreenn extends StatelessWidget { ); }, itemBuilder: (v) { - return UserItem( + return UserItem.gitlab( avatarUrl: v.avatarUrl, login: v.path, + name: v.name, bio: Text(v.description ?? ''), - url: '/gitlab/group/${v.id}', + id: v.id, ); }, ); diff --git a/lib/screens/gl_members.dart b/lib/screens/gl_members.dart index 46ba156..2539edb 100644 --- a/lib/screens/gl_members.dart +++ b/lib/screens/gl_members.dart @@ -38,11 +38,12 @@ class GlMembersScreen extends StatelessWidget { ); }, itemBuilder: (v) { - return UserItem( + return UserItem.gitlab( avatarUrl: v.avatarUrl, login: v.username, + name: v.name, bio: Text(accessLevelMap[v.accessLevel] ?? ''), - url: '/gitlab/user/${v.id}', + id: v.id, ); }, ); diff --git a/lib/screens/gl_search.dart b/lib/screens/gl_search.dart index ce05441..c788ca0 100644 --- a/lib/screens/gl_search.dart +++ b/lib/screens/gl_search.dart @@ -102,18 +102,21 @@ class _GlSearchScreenState extends State { static const tabs = ['Projects', 'Users']; - Widget _buildItem(p) { + Widget _buildItem(_p) { switch (_activeTab) { case 0: + final p = _p as GitlabProject; final updatedAt = timeago.format(p.lastActivityAt); return RepositoryItem.gl( payload: p, note: 'Updated $updatedAt', ); case 1: - return UserItem( + final p = _p as GitlabUser; + return UserItem.gitlab( login: p.username, - url: '/gitlab/user/${p.id}', + name: p.name, + id: p.id, avatarUrl: p.avatarUrl, bio: Text(p.bio ?? ''), ); diff --git a/lib/screens/gl_starrers.dart b/lib/screens/gl_starrers.dart index 088adf7..2865f05 100644 --- a/lib/screens/gl_starrers.dart +++ b/lib/screens/gl_starrers.dart @@ -29,11 +29,12 @@ class GlStarrersScreen extends StatelessWidget { ); }, itemBuilder: (v) { - return UserItem( + return UserItem.gitlab( avatarUrl: v.user.avatarUrl, login: v.user.username, + name: v.user.name, bio: Text('Starred ' + timeago.format(v.starredSince)), - url: '/gitlab/user/${v.user.id}', + id: v.user.id, ); }, ); diff --git a/lib/screens/gt_orgs.dart b/lib/screens/gt_orgs.dart index b0093bd..c444608 100644 --- a/lib/screens/gt_orgs.dart +++ b/lib/screens/gt_orgs.dart @@ -25,11 +25,11 @@ class GtOrgsScreen extends StatelessWidget { ); }, itemBuilder: (v) { - return UserItem( + return UserItem.gitea( avatarUrl: v.avatarUrl, login: v.username, + name: v.fullName, bio: Text(v.description ?? v.website ?? v.location), - url: '/gitea/${v.username}?org=1', ); }, ); diff --git a/lib/screens/gt_users.dart b/lib/screens/gt_users.dart index 3c0170d..c1c532f 100644 --- a/lib/screens/gt_users.dart +++ b/lib/screens/gt_users.dart @@ -41,11 +41,11 @@ class GtUsersScreen extends StatelessWidget { ); }, itemBuilder: (payload) { - return UserItem( + return UserItem.gitea( login: payload.login, + name: payload.fullName, avatarUrl: payload.avatarUrl, bio: Text('Joined on ${timeago.format(payload.created)}'), - url: '/gitea/${payload.login}', ); }, ); diff --git a/lib/widgets/user_item.dart b/lib/widgets/user_item.dart index 2ac3fa9..346dc18 100644 --- a/lib/widgets/user_item.dart +++ b/lib/widgets/user_item.dart @@ -14,23 +14,39 @@ const userGqlChunk = ''' class UserItem extends StatelessWidget { final String login; - // final String name; + final String name; final String avatarUrl; final Widget bio; final String url; - UserItem.gh({ - @required this.avatarUrl, + UserItem.github({ @required this.login, + @required this.name, + @required this.avatarUrl, @required this.bio, }) : url = '/github/$login'; - UserItem({ - @required this.avatarUrl, + UserItem.gitlab({ @required this.login, + @required this.name, + @required this.avatarUrl, @required this.bio, - @required this.url, - }); + @required int id, + }) : url = '/gitlab/group/$id'; + + UserItem.gitea({ + @required this.login, + @required this.name, + @required this.avatarUrl, + @required this.bio, + }) : url = '/gitea/$login'; + + UserItem.bitbucket({ + @required this.login, + @required this.name, + @required this.avatarUrl, + @required this.bio, + }) : url = '/bitbucket/$login?team=1'; @override Widget build(BuildContext context) { @@ -40,6 +56,7 @@ class UserItem extends StatelessWidget { child: Container( padding: CommonStyle.padding, child: Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Avatar(url: avatarUrl, size: AvatarSize.large), SizedBox(width: 10), @@ -49,21 +66,24 @@ class UserItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( + crossAxisAlignment: CrossAxisAlignment.baseline, children: [ - // Text( - // name ?? login, - // style: TextStyle( - // color: theme.palette.text, - // fontSize: 18, - // ), - // ), - // SizedBox(width: 8), + if (name != null && name.isNotEmpty) ...[ + Text( + name, + style: TextStyle( + color: theme.palette.text, + fontSize: 18, + fontWeight: FontWeight.w500, + ), + ), + SizedBox(width: 8), + ], Text( login, style: TextStyle( - color: theme.palette.primary, - fontSize: 18, - fontWeight: FontWeight.w600, + color: theme.palette.text, + fontSize: 16, ), ), ],