diff --git a/lib/screens/bb_user.dart b/lib/screens/bb_user.dart index d5d8d76..8aad1c9 100644 --- a/lib/screens/bb_user.dart +++ b/lib/screens/bb_user.dart @@ -56,6 +56,7 @@ class BbUserScreen extends StatelessWidget { avatarUrl: user.avatarUrl, name: user.displayName, createdAt: user.createdOn, + isViewer: isViewer, bio: null, ), CommonStyle.border, diff --git a/lib/screens/gh_repo.dart b/lib/screens/gh_repo.dart index a813e89..1a732f3 100644 --- a/lib/screens/gh_repo.dart +++ b/lib/screens/gh_repo.dart @@ -115,7 +115,7 @@ class GhRepoScreen extends StatelessWidget { active: repo.viewerSubscription == GhRepoSubscriptionState.SUBSCRIBED, text: _buildWatchState(repo.viewerSubscription), - onPressed: () async { + onTap: () async { final vs = GhRepoSubscriptionState.values.where((v) => v != GhRepoSubscriptionState.ARTEMIS_UNKNOWN); theme.showActions(context, [ @@ -176,7 +176,7 @@ class GhRepoScreen extends StatelessWidget { MutationButton( active: repo.viewerHasStarred, text: repo.viewerHasStarred ? 'Unstar' : 'Star', - onPressed: () async { + onTap: () async { if (repo.viewerHasStarred) { await context .read() diff --git a/lib/screens/gh_user.dart b/lib/screens/gh_user.dart index 0904616..6aff3f8 100644 --- a/lib/screens/gh_user.dart +++ b/lib/screens/gh_user.dart @@ -72,22 +72,24 @@ class GhUserScreen extends StatelessWidget { login: p.login, createdAt: p.createdAt, bio: p.bio, - followWidget: p.viewerCanFollow == true - ? MutationButton( - active: p.viewerIsFollowing, - text: p.viewerIsFollowing ? 'Unfollow' : 'Follow', - onPressed: () async { - if (p.viewerIsFollowing) { - await auth.ghClient.users.unfollowUser(p.login); - } else { - await auth.ghClient.users.followUser(p.login); - } - setState(() { - p.viewerIsFollowing = !p.viewerIsFollowing; - }); - }, - ) - : null, + isViewer: isViewer, + rightWidgets: [ + if (p.viewerCanFollow) + MutationButton( + active: p.viewerIsFollowing, + text: p.viewerIsFollowing ? 'Unfollow' : 'Follow', + onTap: () async { + if (p.viewerIsFollowing) { + await auth.ghClient.users.unfollowUser(p.login); + } else { + await auth.ghClient.users.followUser(p.login); + } + setState(() { + p.viewerIsFollowing = !p.viewerIsFollowing; + }); + }, + ) + ], ), CommonStyle.border, Row(children: [ diff --git a/lib/screens/gl_user.dart b/lib/screens/gl_user.dart index 302208e..81dd53c 100644 --- a/lib/screens/gl_user.dart +++ b/lib/screens/gl_user.dart @@ -50,6 +50,7 @@ class GlUserScreen extends StatelessWidget { name: user.name, createdAt: user.createdAt, bio: user.bio, + isViewer: isViewer, ), CommonStyle.border, Column( diff --git a/lib/screens/gt_user.dart b/lib/screens/gt_user.dart index f4b6633..09f19de 100644 --- a/lib/screens/gt_user.dart +++ b/lib/screens/gt_user.dart @@ -105,6 +105,7 @@ class GtUserScreen extends StatelessWidget { avatarUrl: p.user.avatarUrl, name: p.user.fullName, createdAt: p.user.created, + isViewer: isViewer, bio: '', ), CommonStyle.border, diff --git a/lib/widgets/mutation_button.dart b/lib/widgets/mutation_button.dart index e5eda0a..d2c6cdd 100644 --- a/lib/widgets/mutation_button.dart +++ b/lib/widgets/mutation_button.dart @@ -6,12 +6,14 @@ import 'package:provider/provider.dart'; class MutationButton extends StatelessWidget { final bool active; final String text; - final VoidCallback onPressed; + final String url; + final VoidCallback onTap; MutationButton({ @required this.active, @required this.text, - @required this.onPressed, + this.url, + this.onTap, }); @override @@ -21,7 +23,8 @@ class MutationButton extends StatelessWidget { final backgroundColor = active ? theme.palette.primary : theme.palette.background; return Link( - onTap: onPressed, + url: url, + onTap: onTap, child: Container( padding: EdgeInsets.symmetric( horizontal: 12, diff --git a/lib/widgets/user_header.dart b/lib/widgets/user_header.dart index 066f564..d6c0f89 100644 --- a/lib/widgets/user_header.dart +++ b/lib/widgets/user_header.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:git_touch/models/theme.dart'; import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/avatar.dart'; +import 'package:git_touch/widgets/mutation_button.dart'; import 'package:provider/provider.dart'; class UserHeader extends StatelessWidget { @@ -10,7 +11,7 @@ class UserHeader extends StatelessWidget { final String login; final DateTime createdAt; final String bio; - final Widget followWidget; + final List rightWidgets; UserHeader({ @required this.avatarUrl, @@ -18,8 +19,17 @@ class UserHeader extends StatelessWidget { @required this.login, @required this.createdAt, @required this.bio, - this.followWidget, - }); + bool isViewer = false, + List rightWidgets, + }) : this.rightWidgets = [ + ...(rightWidgets ?? []), + if (isViewer) + MutationButton( + active: false, + text: 'Switch accounts', + url: '/login', + ) + ]; @override Widget build(BuildContext context) { @@ -32,9 +42,9 @@ class UserHeader extends StatelessWidget { Row( children: [ Avatar(url: avatarUrl, size: AvatarSize.extraLarge), - if (followWidget != null) ...[ + if (rightWidgets?.isNotEmpty) ...[ Expanded(child: Container()), - followWidget, + ...rightWidgets, ] ], ),