✨ Publisher list on account
This commit is contained in:
		| @@ -9,6 +9,7 @@ import 'package:gap/gap.dart'; | |||||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||||
| import 'package:island/models/chat.dart'; | import 'package:island/models/chat.dart'; | ||||||
| import 'package:island/models/developer.dart'; | import 'package:island/models/developer.dart'; | ||||||
|  | import 'package:island/models/publisher.dart'; | ||||||
| import 'package:island/models/relationship.dart'; | import 'package:island/models/relationship.dart'; | ||||||
| import 'package:island/models/account.dart'; | import 'package:island/models/account.dart'; | ||||||
| import 'package:island/pods/config.dart'; | import 'package:island/pods/config.dart'; | ||||||
| @@ -224,7 +225,13 @@ class _AccountProfileDetail extends StatelessWidget { | |||||||
|           spacing: 6, |           spacing: 6, | ||||||
|           children: [ |           children: [ | ||||||
|             Icon(Symbols.fingerprint, size: 17, fill: 1).padding(right: 2), |             Icon(Symbols.fingerprint, size: 17, fill: 1).padding(right: 2), | ||||||
|             Text(data.id), |             Flexible( | ||||||
|  |               child: Text( | ||||||
|  |                 data.id, | ||||||
|  |                 maxLines: 1, | ||||||
|  |                 overflow: TextOverflow.ellipsis, | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|           ], |           ], | ||||||
|         ), |         ), | ||||||
|         onTap: () { |         onTap: () { | ||||||
| @@ -314,6 +321,56 @@ class _AccountProfileLinks extends StatelessWidget { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | class _AccountPublisherList extends StatelessWidget { | ||||||
|  |   final List<SnPublisher> publishers; | ||||||
|  |  | ||||||
|  |   const _AccountPublisherList({required this.publishers}); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     if (publishers.isEmpty) return const SizedBox.shrink(); | ||||||
|  |     return Card( | ||||||
|  |       child: Column( | ||||||
|  |         crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |         children: [ | ||||||
|  |           Text( | ||||||
|  |             'publishers', | ||||||
|  |           ).tr().bold().padding(horizontal: 24, top: 12, bottom: 4), | ||||||
|  |           for (final publisher in publishers) | ||||||
|  |             ListTile( | ||||||
|  |               title: Text(publisher.nick), | ||||||
|  |               subtitle: | ||||||
|  |                   publisher.bio.isNotEmpty | ||||||
|  |                       ? Text( | ||||||
|  |                         publisher.bio, | ||||||
|  |                         maxLines: 3, | ||||||
|  |                         overflow: TextOverflow.ellipsis, | ||||||
|  |                       ) | ||||||
|  |                       : null, | ||||||
|  |               leading: ProfilePictureWidget( | ||||||
|  |                 file: publisher.picture, | ||||||
|  |                 borderRadius: publisher.type == 1 ? 8 : null, | ||||||
|  |               ), | ||||||
|  |               isThreeLine: true, | ||||||
|  |               contentPadding: EdgeInsets.symmetric(horizontal: 24), | ||||||
|  |               trailing: const Icon(Symbols.chevron_right), | ||||||
|  |               shape: RoundedRectangleBorder( | ||||||
|  |                 borderRadius: const BorderRadius.all(Radius.circular(8)), | ||||||
|  |               ), | ||||||
|  |               onTap: () { | ||||||
|  |                 Navigator.pop(context, true); | ||||||
|  |                 context.pushNamed( | ||||||
|  |                   'publisherProfile', | ||||||
|  |                   pathParameters: {'name': publisher.name}, | ||||||
|  |                 ); | ||||||
|  |               }, | ||||||
|  |             ), | ||||||
|  |         ], | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| class _AccountAction extends StatelessWidget { | class _AccountAction extends StatelessWidget { | ||||||
|   final SnAccount data; |   final SnAccount data; | ||||||
|   final AsyncValue<SnRelationship?> accountRelationship; |   final AsyncValue<SnRelationship?> accountRelationship; | ||||||
| @@ -335,6 +392,7 @@ class _AccountAction extends StatelessWidget { | |||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return Card( |     return Card( | ||||||
|       child: Column( |       child: Column( | ||||||
|  |         spacing: 8, | ||||||
|         children: [ |         children: [ | ||||||
|           Row( |           Row( | ||||||
|             spacing: 8, |             spacing: 8, | ||||||
| @@ -427,6 +485,7 @@ class _AccountAction extends StatelessWidget { | |||||||
|                   color: Theme.of(context).colorScheme.onError, |                   color: Theme.of(context).colorScheme.onError, | ||||||
|                 ), |                 ), | ||||||
|                 style: ButtonStyle( |                 style: ButtonStyle( | ||||||
|  |                   visualDensity: VisualDensity.compact, | ||||||
|                   backgroundColor: WidgetStatePropertyAll( |                   backgroundColor: WidgetStatePropertyAll( | ||||||
|                     Theme.of(context).colorScheme.error, |                     Theme.of(context).colorScheme.error, | ||||||
|                   ), |                   ), | ||||||
| @@ -533,6 +592,20 @@ Future<SnDeveloper?> accountBotDeveloper(Ref ref, String uname) async { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @riverpod | ||||||
|  | Future<List<SnPublisher>> accountPublishers(Ref ref, String id) async { | ||||||
|  |   final apiClient = ref.watch(apiClientProvider); | ||||||
|  |   try { | ||||||
|  |     final resp = await apiClient.get('/sphere/publishers/of/$id'); | ||||||
|  |     return resp.data | ||||||
|  |         .map((e) => SnPublisher.fromJson(e)) | ||||||
|  |         .cast<SnPublisher>() | ||||||
|  |         .toList(); | ||||||
|  |   } catch (err) { | ||||||
|  |     return []; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| class AccountProfileScreen extends HookConsumerWidget { | class AccountProfileScreen extends HookConsumerWidget { | ||||||
|   final String name; |   final String name; | ||||||
|   const AccountProfileScreen({super.key, required this.name}); |   const AccountProfileScreen({super.key, required this.name}); | ||||||
| @@ -625,245 +698,255 @@ class AccountProfileScreen extends HookConsumerWidget { | |||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     return account.when( |     return account.when( | ||||||
|       data: |       data: (data) { | ||||||
|           (data) => AppScaffold( |         final accountPublishers = ref.watch(accountPublishersProvider(data.id)); | ||||||
|             isNoBackground: false, |         return AppScaffold( | ||||||
|             appBar: |           isNoBackground: false, | ||||||
|                 isWideScreen(context) |           appBar: | ||||||
|                     ? AppBar( |               isWideScreen(context) | ||||||
|                       foregroundColor: appbarColor.value, |                   ? AppBar( | ||||||
|                       leading: PageBackButton( |                     foregroundColor: appbarColor.value, | ||||||
|                         color: appbarColor.value, |                     leading: PageBackButton( | ||||||
|                         shadows: [appbarShadow], |                       color: appbarColor.value, | ||||||
|                       ), |                       shadows: [appbarShadow], | ||||||
|                       flexibleSpace: Stack( |                     ), | ||||||
|                         children: [ |                     flexibleSpace: Stack( | ||||||
|                           Positioned.fill( |  | ||||||
|                             child: |  | ||||||
|                                 data.profile.background?.id != null |  | ||||||
|                                     ? CloudImageWidget( |  | ||||||
|                                       file: data.profile.background, |  | ||||||
|                                     ) |  | ||||||
|                                     : Container( |  | ||||||
|                                       color: |  | ||||||
|                                           Theme.of( |  | ||||||
|                                             context, |  | ||||||
|                                           ).appBarTheme.backgroundColor, |  | ||||||
|                                     ), |  | ||||||
|                           ), |  | ||||||
|                           FlexibleSpaceBar( |  | ||||||
|                             title: Text( |  | ||||||
|                               data.nick, |  | ||||||
|                               style: TextStyle( |  | ||||||
|                                 color: |  | ||||||
|                                     appbarColor.value ?? |  | ||||||
|                                     Theme.of( |  | ||||||
|                                       context, |  | ||||||
|                                     ).appBarTheme.foregroundColor, |  | ||||||
|                                 shadows: [appbarShadow], |  | ||||||
|                               ), |  | ||||||
|                             ), |  | ||||||
|                           ), |  | ||||||
|                         ], |  | ||||||
|                       ), |  | ||||||
|                     ) |  | ||||||
|                     : null, |  | ||||||
|             body: |  | ||||||
|                 isWideScreen(context) |  | ||||||
|                     ? Row( |  | ||||||
|                       children: [ |                       children: [ | ||||||
|                         Flexible( |                         Positioned.fill( | ||||||
|                           child: CustomScrollView( |                           child: | ||||||
|                             slivers: [ |                               data.profile.background?.id != null | ||||||
|                               SliverToBoxAdapter( |                                   ? CloudImageWidget( | ||||||
|                                 child: _AccountBasicInfo( |                                     file: data.profile.background, | ||||||
|                                   data: data, |                                   ) | ||||||
|                                   uname: name, |                                   : Container( | ||||||
|                                   accountDeveloper: accountDeveloper, |  | ||||||
|                                 ), |  | ||||||
|                               ), |  | ||||||
|                               if (data.badges.isNotEmpty) |  | ||||||
|                                 SliverToBoxAdapter( |  | ||||||
|                                   child: Card( |  | ||||||
|                                     child: BadgeList( |  | ||||||
|                                       badges: data.badges, |  | ||||||
|                                     ).padding(horizontal: 26, vertical: 20), |  | ||||||
|                                   ).padding(left: 2, right: 4), |  | ||||||
|                                 ), |  | ||||||
|                               SliverToBoxAdapter( |  | ||||||
|                                 child: Column( |  | ||||||
|                                   spacing: 12, |  | ||||||
|                                   children: [ |  | ||||||
|                                     LevelingProgressCard( |  | ||||||
|                                       level: data.profile.level, |  | ||||||
|                                       experience: data.profile.experience, |  | ||||||
|                                       progress: data.profile.levelingProgress, |  | ||||||
|                                     ).padding(left: 2, right: 4), |  | ||||||
|                                     if (data.profile.verification != null) |  | ||||||
|                                       Card( |  | ||||||
|                                         margin: EdgeInsets.zero, |  | ||||||
|                                         child: VerificationStatusCard( |  | ||||||
|                                           mark: data.profile.verification!, |  | ||||||
|                                         ), |  | ||||||
|                                       ), |  | ||||||
|                                   ], |  | ||||||
|                                 ).padding(horizontal: 4, top: 8), |  | ||||||
|                               ), |  | ||||||
|                               SliverToBoxAdapter( |  | ||||||
|                                 child: _AccountProfileBio( |  | ||||||
|                                   data: data, |  | ||||||
|                                 ).padding(top: 4), |  | ||||||
|                               ), |  | ||||||
|                               if (data.profile.links.isNotEmpty) |  | ||||||
|                                 SliverToBoxAdapter( |  | ||||||
|                                   child: _AccountProfileLinks(data: data), |  | ||||||
|                                 ), |  | ||||||
|                               SliverToBoxAdapter( |  | ||||||
|                                 child: _AccountProfileDetail(data: data), |  | ||||||
|                               ), |  | ||||||
|                             ], |  | ||||||
|                           ), |  | ||||||
|                         ), |  | ||||||
|                         Flexible( |  | ||||||
|                           child: CustomScrollView( |  | ||||||
|                             slivers: [ |  | ||||||
|                               SliverGap(24), |  | ||||||
|                               if (user.value != null && !isCurrentUser) |  | ||||||
|                                 SliverToBoxAdapter( |  | ||||||
|                                   child: _AccountAction( |  | ||||||
|                                     data: data, |  | ||||||
|                                     accountRelationship: accountRelationship, |  | ||||||
|                                     accountChat: accountChat, |  | ||||||
|                                     relationshipAction: relationshipAction, |  | ||||||
|                                     blockAction: blockAction, |  | ||||||
|                                     directMessageAction: directMessageAction, |  | ||||||
|                                   ), |  | ||||||
|                                 ), |  | ||||||
|                               SliverToBoxAdapter( |  | ||||||
|                                 child: Card( |  | ||||||
|                                   child: FortuneGraphWidget( |  | ||||||
|                                     events: accountEvents, |  | ||||||
|                                     eventCalanderUser: data.name, |  | ||||||
|                                     margin: EdgeInsets.zero, |  | ||||||
|                                   ), |  | ||||||
|                                 ), |  | ||||||
|                               ), |  | ||||||
|                             ], |  | ||||||
|                           ), |  | ||||||
|                         ), |  | ||||||
|                       ], |  | ||||||
|                     ).padding(horizontal: 24) |  | ||||||
|                     : CustomScrollView( |  | ||||||
|                       slivers: [ |  | ||||||
|                         SliverAppBar( |  | ||||||
|                           foregroundColor: appbarColor.value, |  | ||||||
|                           expandedHeight: 180, |  | ||||||
|                           pinned: true, |  | ||||||
|                           leading: PageBackButton( |  | ||||||
|                             color: appbarColor.value, |  | ||||||
|                             shadows: [appbarShadow], |  | ||||||
|                           ), |  | ||||||
|                           flexibleSpace: Stack( |  | ||||||
|                             children: [ |  | ||||||
|                               Positioned.fill( |  | ||||||
|                                 child: |  | ||||||
|                                     data.profile.background?.id != null |  | ||||||
|                                         ? CloudImageWidget( |  | ||||||
|                                           file: data.profile.background, |  | ||||||
|                                         ) |  | ||||||
|                                         : Container( |  | ||||||
|                                           color: |  | ||||||
|                                               Theme.of( |  | ||||||
|                                                 context, |  | ||||||
|                                               ).appBarTheme.backgroundColor, |  | ||||||
|                                         ), |  | ||||||
|                               ), |  | ||||||
|                               FlexibleSpaceBar( |  | ||||||
|                                 title: Text( |  | ||||||
|                                   data.nick, |  | ||||||
|                                   style: TextStyle( |  | ||||||
|                                     color: |                                     color: | ||||||
|                                         appbarColor.value ?? |  | ||||||
|                                         Theme.of( |                                         Theme.of( | ||||||
|                                           context, |                                           context, | ||||||
|                                         ).appBarTheme.foregroundColor, |                                         ).appBarTheme.backgroundColor, | ||||||
|                                     shadows: [appbarShadow], |  | ||||||
|                                   ), |                                   ), | ||||||
|                                 ), |  | ||||||
|                               ), |  | ||||||
|                             ], |  | ||||||
|                           ), |  | ||||||
|                         ), |                         ), | ||||||
|                         SliverToBoxAdapter( |                         FlexibleSpaceBar( | ||||||
|                           child: _AccountBasicInfo( |                           title: Text( | ||||||
|                             data: data, |                             data.nick, | ||||||
|                             uname: name, |                             style: TextStyle( | ||||||
|                             accountDeveloper: accountDeveloper, |                               color: | ||||||
|                           ), |                                   appbarColor.value ?? | ||||||
|                         ), |                                   Theme.of(context).appBarTheme.foregroundColor, | ||||||
|                         if (data.badges.isNotEmpty) |                               shadows: [appbarShadow], | ||||||
|                           SliverToBoxAdapter( |  | ||||||
|                             child: Card( |  | ||||||
|                               child: BadgeList( |  | ||||||
|                                 badges: data.badges, |  | ||||||
|                               ).padding(horizontal: 26, vertical: 20), |  | ||||||
|                             ).padding(horizontal: 4), |  | ||||||
|                           ), |  | ||||||
|                         SliverToBoxAdapter( |  | ||||||
|                           child: Column( |  | ||||||
|                             children: [ |  | ||||||
|                               LevelingProgressCard( |  | ||||||
|                                 level: data.profile.level, |  | ||||||
|                                 experience: data.profile.experience, |  | ||||||
|                                 progress: data.profile.levelingProgress, |  | ||||||
|                               ).padding(top: 8, horizontal: 8, bottom: 4), |  | ||||||
|                               if (data.profile.verification != null) |  | ||||||
|                                 Card( |  | ||||||
|                                   child: VerificationStatusCard( |  | ||||||
|                                     mark: data.profile.verification!, |  | ||||||
|                                   ), |  | ||||||
|                                 ).padding(horizontal: 4), |  | ||||||
|                             ], |  | ||||||
|                           ), |  | ||||||
|                         ), |  | ||||||
|                         SliverToBoxAdapter( |  | ||||||
|                           child: _AccountProfileBio( |  | ||||||
|                             data: data, |  | ||||||
|                           ).padding(horizontal: 4), |  | ||||||
|                         ), |  | ||||||
|                         if (data.profile.links.isNotEmpty) |  | ||||||
|                           SliverToBoxAdapter( |  | ||||||
|                             child: _AccountProfileLinks( |  | ||||||
|                               data: data, |  | ||||||
|                             ).padding(horizontal: 4), |  | ||||||
|                           ), |  | ||||||
|                         SliverToBoxAdapter( |  | ||||||
|                           child: _AccountProfileDetail( |  | ||||||
|                             data: data, |  | ||||||
|                           ).padding(horizontal: 4), |  | ||||||
|                         ), |  | ||||||
|                         if (user.value != null && !isCurrentUser) |  | ||||||
|                           SliverToBoxAdapter( |  | ||||||
|                             child: _AccountAction( |  | ||||||
|                               data: data, |  | ||||||
|                               accountRelationship: accountRelationship, |  | ||||||
|                               accountChat: accountChat, |  | ||||||
|                               relationshipAction: relationshipAction, |  | ||||||
|                               blockAction: blockAction, |  | ||||||
|                               directMessageAction: directMessageAction, |  | ||||||
|                             ).padding(horizontal: 4), |  | ||||||
|                           ), |  | ||||||
|                         SliverToBoxAdapter( |  | ||||||
|                           child: Card( |  | ||||||
|                             child: FortuneGraphWidget( |  | ||||||
|                               events: accountEvents, |  | ||||||
|                               eventCalanderUser: data.name, |  | ||||||
|                             ), |                             ), | ||||||
|                           ).padding(horizontal: 4), |                           ), | ||||||
|                         ), |                         ), | ||||||
|                       ], |                       ], | ||||||
|                     ), |                     ), | ||||||
|           ), |                   ) | ||||||
|  |                   : null, | ||||||
|  |           body: | ||||||
|  |               isWideScreen(context) | ||||||
|  |                   ? Row( | ||||||
|  |                     children: [ | ||||||
|  |                       Flexible( | ||||||
|  |                         child: CustomScrollView( | ||||||
|  |                           slivers: [ | ||||||
|  |                             SliverToBoxAdapter( | ||||||
|  |                               child: _AccountBasicInfo( | ||||||
|  |                                 data: data, | ||||||
|  |                                 uname: name, | ||||||
|  |                                 accountDeveloper: accountDeveloper, | ||||||
|  |                               ), | ||||||
|  |                             ), | ||||||
|  |                             if (data.badges.isNotEmpty) | ||||||
|  |                               SliverToBoxAdapter( | ||||||
|  |                                 child: Card( | ||||||
|  |                                   child: BadgeList( | ||||||
|  |                                     badges: data.badges, | ||||||
|  |                                   ).padding(horizontal: 26, vertical: 20), | ||||||
|  |                                 ).padding(left: 2, right: 4), | ||||||
|  |                               ), | ||||||
|  |                             SliverToBoxAdapter( | ||||||
|  |                               child: Column( | ||||||
|  |                                 spacing: 12, | ||||||
|  |                                 children: [ | ||||||
|  |                                   LevelingProgressCard( | ||||||
|  |                                     level: data.profile.level, | ||||||
|  |                                     experience: data.profile.experience, | ||||||
|  |                                     progress: data.profile.levelingProgress, | ||||||
|  |                                   ).padding(left: 2, right: 4), | ||||||
|  |                                   if (data.profile.verification != null) | ||||||
|  |                                     Card( | ||||||
|  |                                       margin: EdgeInsets.zero, | ||||||
|  |                                       child: VerificationStatusCard( | ||||||
|  |                                         mark: data.profile.verification!, | ||||||
|  |                                       ), | ||||||
|  |                                     ), | ||||||
|  |                                 ], | ||||||
|  |                               ).padding(horizontal: 4, top: 8), | ||||||
|  |                             ), | ||||||
|  |                             SliverToBoxAdapter( | ||||||
|  |                               child: _AccountProfileBio( | ||||||
|  |                                 data: data, | ||||||
|  |                               ).padding(top: 4), | ||||||
|  |                             ), | ||||||
|  |                             if (data.profile.links.isNotEmpty) | ||||||
|  |                               SliverToBoxAdapter( | ||||||
|  |                                 child: _AccountProfileLinks(data: data), | ||||||
|  |                               ), | ||||||
|  |                             SliverToBoxAdapter( | ||||||
|  |                               child: _AccountProfileDetail(data: data), | ||||||
|  |                             ), | ||||||
|  |                           ], | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                       Flexible( | ||||||
|  |                         child: CustomScrollView( | ||||||
|  |                           slivers: [ | ||||||
|  |                             SliverGap(24), | ||||||
|  |                             SliverToBoxAdapter( | ||||||
|  |                               child: _AccountPublisherList( | ||||||
|  |                                 publishers: accountPublishers.value ?? [], | ||||||
|  |                               ), | ||||||
|  |                             ), | ||||||
|  |                             if (user.value != null && !isCurrentUser) | ||||||
|  |                               SliverToBoxAdapter( | ||||||
|  |                                 child: _AccountAction( | ||||||
|  |                                   data: data, | ||||||
|  |                                   accountRelationship: accountRelationship, | ||||||
|  |                                   accountChat: accountChat, | ||||||
|  |                                   relationshipAction: relationshipAction, | ||||||
|  |                                   blockAction: blockAction, | ||||||
|  |                                   directMessageAction: directMessageAction, | ||||||
|  |                                 ), | ||||||
|  |                               ), | ||||||
|  |                             SliverToBoxAdapter( | ||||||
|  |                               child: Card( | ||||||
|  |                                 child: FortuneGraphWidget( | ||||||
|  |                                   events: accountEvents, | ||||||
|  |                                   eventCalanderUser: data.name, | ||||||
|  |                                   margin: EdgeInsets.zero, | ||||||
|  |                                 ), | ||||||
|  |                               ), | ||||||
|  |                             ), | ||||||
|  |                           ], | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                     ], | ||||||
|  |                   ).padding(horizontal: 24) | ||||||
|  |                   : CustomScrollView( | ||||||
|  |                     slivers: [ | ||||||
|  |                       SliverAppBar( | ||||||
|  |                         foregroundColor: appbarColor.value, | ||||||
|  |                         expandedHeight: 180, | ||||||
|  |                         pinned: true, | ||||||
|  |                         leading: PageBackButton( | ||||||
|  |                           color: appbarColor.value, | ||||||
|  |                           shadows: [appbarShadow], | ||||||
|  |                         ), | ||||||
|  |                         flexibleSpace: Stack( | ||||||
|  |                           children: [ | ||||||
|  |                             Positioned.fill( | ||||||
|  |                               child: | ||||||
|  |                                   data.profile.background?.id != null | ||||||
|  |                                       ? CloudImageWidget( | ||||||
|  |                                         file: data.profile.background, | ||||||
|  |                                       ) | ||||||
|  |                                       : Container( | ||||||
|  |                                         color: | ||||||
|  |                                             Theme.of( | ||||||
|  |                                               context, | ||||||
|  |                                             ).appBarTheme.backgroundColor, | ||||||
|  |                                       ), | ||||||
|  |                             ), | ||||||
|  |                             FlexibleSpaceBar( | ||||||
|  |                               title: Text( | ||||||
|  |                                 data.nick, | ||||||
|  |                                 style: TextStyle( | ||||||
|  |                                   color: | ||||||
|  |                                       appbarColor.value ?? | ||||||
|  |                                       Theme.of( | ||||||
|  |                                         context, | ||||||
|  |                                       ).appBarTheme.foregroundColor, | ||||||
|  |                                   shadows: [appbarShadow], | ||||||
|  |                                 ), | ||||||
|  |                               ), | ||||||
|  |                             ), | ||||||
|  |                           ], | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                       SliverToBoxAdapter( | ||||||
|  |                         child: _AccountBasicInfo( | ||||||
|  |                           data: data, | ||||||
|  |                           uname: name, | ||||||
|  |                           accountDeveloper: accountDeveloper, | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                       if (data.badges.isNotEmpty) | ||||||
|  |                         SliverToBoxAdapter( | ||||||
|  |                           child: Card( | ||||||
|  |                             child: BadgeList( | ||||||
|  |                               badges: data.badges, | ||||||
|  |                             ).padding(horizontal: 26, vertical: 20), | ||||||
|  |                           ).padding(horizontal: 4), | ||||||
|  |                         ), | ||||||
|  |                       SliverToBoxAdapter( | ||||||
|  |                         child: Column( | ||||||
|  |                           children: [ | ||||||
|  |                             LevelingProgressCard( | ||||||
|  |                               level: data.profile.level, | ||||||
|  |                               experience: data.profile.experience, | ||||||
|  |                               progress: data.profile.levelingProgress, | ||||||
|  |                             ).padding(top: 8, horizontal: 8, bottom: 4), | ||||||
|  |                             if (data.profile.verification != null) | ||||||
|  |                               Card( | ||||||
|  |                                 child: VerificationStatusCard( | ||||||
|  |                                   mark: data.profile.verification!, | ||||||
|  |                                 ), | ||||||
|  |                               ).padding(horizontal: 4), | ||||||
|  |                           ], | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                       SliverToBoxAdapter( | ||||||
|  |                         child: _AccountProfileBio( | ||||||
|  |                           data: data, | ||||||
|  |                         ).padding(horizontal: 4), | ||||||
|  |                       ), | ||||||
|  |                       if (data.profile.links.isNotEmpty) | ||||||
|  |                         SliverToBoxAdapter( | ||||||
|  |                           child: _AccountProfileLinks( | ||||||
|  |                             data: data, | ||||||
|  |                           ).padding(horizontal: 4), | ||||||
|  |                         ), | ||||||
|  |                       SliverToBoxAdapter( | ||||||
|  |                         child: _AccountPublisherList( | ||||||
|  |                           publishers: accountPublishers.value ?? [], | ||||||
|  |                         ).padding(horizontal: 4), | ||||||
|  |                       ), | ||||||
|  |                       SliverToBoxAdapter( | ||||||
|  |                         child: _AccountProfileDetail( | ||||||
|  |                           data: data, | ||||||
|  |                         ).padding(horizontal: 4), | ||||||
|  |                       ), | ||||||
|  |                       if (user.value != null && !isCurrentUser) | ||||||
|  |                         SliverToBoxAdapter( | ||||||
|  |                           child: _AccountAction( | ||||||
|  |                             data: data, | ||||||
|  |                             accountRelationship: accountRelationship, | ||||||
|  |                             accountChat: accountChat, | ||||||
|  |                             relationshipAction: relationshipAction, | ||||||
|  |                             blockAction: blockAction, | ||||||
|  |                             directMessageAction: directMessageAction, | ||||||
|  |                           ).padding(horizontal: 4), | ||||||
|  |                         ), | ||||||
|  |                       SliverToBoxAdapter( | ||||||
|  |                         child: Card( | ||||||
|  |                           child: FortuneGraphWidget( | ||||||
|  |                             events: accountEvents, | ||||||
|  |                             eventCalanderUser: data.name, | ||||||
|  |                           ), | ||||||
|  |                         ).padding(horizontal: 4), | ||||||
|  |                       ), | ||||||
|  |                     ], | ||||||
|  |                   ), | ||||||
|  |         ); | ||||||
|  |       }, | ||||||
|       error: |       error: | ||||||
|           (error, stackTrace) => AppScaffold( |           (error, stackTrace) => AppScaffold( | ||||||
|             appBar: AppBar(leading: const PageBackButton()), |             appBar: AppBar(leading: const PageBackButton()), | ||||||
|   | |||||||
| @@ -762,5 +762,127 @@ class _AccountBotDeveloperProviderElement | |||||||
|   String get uname => (origin as AccountBotDeveloperProvider).uname; |   String get uname => (origin as AccountBotDeveloperProvider).uname; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | String _$accountPublishersHash() => r'25f5695b4a5154163d77f1769876d826bf736609'; | ||||||
|  |  | ||||||
|  | /// See also [accountPublishers]. | ||||||
|  | @ProviderFor(accountPublishers) | ||||||
|  | const accountPublishersProvider = AccountPublishersFamily(); | ||||||
|  |  | ||||||
|  | /// See also [accountPublishers]. | ||||||
|  | class AccountPublishersFamily extends Family<AsyncValue<List<SnPublisher>>> { | ||||||
|  |   /// See also [accountPublishers]. | ||||||
|  |   const AccountPublishersFamily(); | ||||||
|  |  | ||||||
|  |   /// See also [accountPublishers]. | ||||||
|  |   AccountPublishersProvider call(String id) { | ||||||
|  |     return AccountPublishersProvider(id); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   AccountPublishersProvider getProviderOverride( | ||||||
|  |     covariant AccountPublishersProvider provider, | ||||||
|  |   ) { | ||||||
|  |     return call(provider.id); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static const Iterable<ProviderOrFamily>? _dependencies = null; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Iterable<ProviderOrFamily>? get dependencies => _dependencies; | ||||||
|  |  | ||||||
|  |   static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Iterable<ProviderOrFamily>? get allTransitiveDependencies => | ||||||
|  |       _allTransitiveDependencies; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   String? get name => r'accountPublishersProvider'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// See also [accountPublishers]. | ||||||
|  | class AccountPublishersProvider | ||||||
|  |     extends AutoDisposeFutureProvider<List<SnPublisher>> { | ||||||
|  |   /// See also [accountPublishers]. | ||||||
|  |   AccountPublishersProvider(String id) | ||||||
|  |     : this._internal( | ||||||
|  |         (ref) => accountPublishers(ref as AccountPublishersRef, id), | ||||||
|  |         from: accountPublishersProvider, | ||||||
|  |         name: r'accountPublishersProvider', | ||||||
|  |         debugGetCreateSourceHash: | ||||||
|  |             const bool.fromEnvironment('dart.vm.product') | ||||||
|  |                 ? null | ||||||
|  |                 : _$accountPublishersHash, | ||||||
|  |         dependencies: AccountPublishersFamily._dependencies, | ||||||
|  |         allTransitiveDependencies: | ||||||
|  |             AccountPublishersFamily._allTransitiveDependencies, | ||||||
|  |         id: id, | ||||||
|  |       ); | ||||||
|  |  | ||||||
|  |   AccountPublishersProvider._internal( | ||||||
|  |     super._createNotifier, { | ||||||
|  |     required super.name, | ||||||
|  |     required super.dependencies, | ||||||
|  |     required super.allTransitiveDependencies, | ||||||
|  |     required super.debugGetCreateSourceHash, | ||||||
|  |     required super.from, | ||||||
|  |     required this.id, | ||||||
|  |   }) : super.internal(); | ||||||
|  |  | ||||||
|  |   final String id; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Override overrideWith( | ||||||
|  |     FutureOr<List<SnPublisher>> Function(AccountPublishersRef provider) create, | ||||||
|  |   ) { | ||||||
|  |     return ProviderOverride( | ||||||
|  |       origin: this, | ||||||
|  |       override: AccountPublishersProvider._internal( | ||||||
|  |         (ref) => create(ref as AccountPublishersRef), | ||||||
|  |         from: from, | ||||||
|  |         name: null, | ||||||
|  |         dependencies: null, | ||||||
|  |         allTransitiveDependencies: null, | ||||||
|  |         debugGetCreateSourceHash: null, | ||||||
|  |         id: id, | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   AutoDisposeFutureProviderElement<List<SnPublisher>> createElement() { | ||||||
|  |     return _AccountPublishersProviderElement(this); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   bool operator ==(Object other) { | ||||||
|  |     return other is AccountPublishersProvider && other.id == id; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   int get hashCode { | ||||||
|  |     var hash = _SystemHash.combine(0, runtimeType.hashCode); | ||||||
|  |     hash = _SystemHash.combine(hash, id.hashCode); | ||||||
|  |  | ||||||
|  |     return _SystemHash.finish(hash); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @Deprecated('Will be removed in 3.0. Use Ref instead') | ||||||
|  | // ignore: unused_element | ||||||
|  | mixin AccountPublishersRef on AutoDisposeFutureProviderRef<List<SnPublisher>> { | ||||||
|  |   /// The parameter `id` of this provider. | ||||||
|  |   String get id; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _AccountPublishersProviderElement | ||||||
|  |     extends AutoDisposeFutureProviderElement<List<SnPublisher>> | ||||||
|  |     with AccountPublishersRef { | ||||||
|  |   _AccountPublishersProviderElement(super.provider); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   String get id => (origin as AccountPublishersProvider).id; | ||||||
|  | } | ||||||
|  |  | ||||||
| // ignore_for_file: type=lint | // ignore_for_file: type=lint | ||||||
| // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package | ||||||
|   | |||||||
| @@ -66,8 +66,8 @@ class _PublisherBasisWidget extends StatelessWidget { | |||||||
|             ), |             ), | ||||||
|           ), |           ), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.pop(context, true); |  | ||||||
|             if (data.account?.name != null) { |             if (data.account?.name != null) { | ||||||
|  |               Navigator.pop(context, true); | ||||||
|               context.pushNamed( |               context.pushNamed( | ||||||
|                 'accountProfile', |                 'accountProfile', | ||||||
|                 pathParameters: {'name': data.account!.name}, |                 pathParameters: {'name': data.account!.name}, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user