✨ 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:island/models/chat.dart';
 | 
			
		||||
import 'package:island/models/developer.dart';
 | 
			
		||||
import 'package:island/models/publisher.dart';
 | 
			
		||||
import 'package:island/models/relationship.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
import 'package:island/pods/config.dart';
 | 
			
		||||
@@ -224,7 +225,13 @@ class _AccountProfileDetail extends StatelessWidget {
 | 
			
		||||
          spacing: 6,
 | 
			
		||||
          children: [
 | 
			
		||||
            Icon(Symbols.fingerprint, size: 17, fill: 1).padding(right: 2),
 | 
			
		||||
            Text(data.id),
 | 
			
		||||
            Flexible(
 | 
			
		||||
              child: Text(
 | 
			
		||||
                data.id,
 | 
			
		||||
                maxLines: 1,
 | 
			
		||||
                overflow: TextOverflow.ellipsis,
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
          ],
 | 
			
		||||
        ),
 | 
			
		||||
        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 {
 | 
			
		||||
  final SnAccount data;
 | 
			
		||||
  final AsyncValue<SnRelationship?> accountRelationship;
 | 
			
		||||
@@ -335,6 +392,7 @@ class _AccountAction extends StatelessWidget {
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Card(
 | 
			
		||||
      child: Column(
 | 
			
		||||
        spacing: 8,
 | 
			
		||||
        children: [
 | 
			
		||||
          Row(
 | 
			
		||||
            spacing: 8,
 | 
			
		||||
@@ -427,6 +485,7 @@ class _AccountAction extends StatelessWidget {
 | 
			
		||||
                  color: Theme.of(context).colorScheme.onError,
 | 
			
		||||
                ),
 | 
			
		||||
                style: ButtonStyle(
 | 
			
		||||
                  visualDensity: VisualDensity.compact,
 | 
			
		||||
                  backgroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                    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 {
 | 
			
		||||
  final String name;
 | 
			
		||||
  const AccountProfileScreen({super.key, required this.name});
 | 
			
		||||
@@ -625,245 +698,255 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return account.when(
 | 
			
		||||
      data:
 | 
			
		||||
          (data) => AppScaffold(
 | 
			
		||||
            isNoBackground: false,
 | 
			
		||||
            appBar:
 | 
			
		||||
                isWideScreen(context)
 | 
			
		||||
                    ? AppBar(
 | 
			
		||||
                      foregroundColor: appbarColor.value,
 | 
			
		||||
                      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],
 | 
			
		||||
                              ),
 | 
			
		||||
                            ),
 | 
			
		||||
                          ),
 | 
			
		||||
                        ],
 | 
			
		||||
                      ),
 | 
			
		||||
                    )
 | 
			
		||||
                    : null,
 | 
			
		||||
            body:
 | 
			
		||||
                isWideScreen(context)
 | 
			
		||||
                    ? Row(
 | 
			
		||||
      data: (data) {
 | 
			
		||||
        final accountPublishers = ref.watch(accountPublishersProvider(data.id));
 | 
			
		||||
        return AppScaffold(
 | 
			
		||||
          isNoBackground: false,
 | 
			
		||||
          appBar:
 | 
			
		||||
              isWideScreen(context)
 | 
			
		||||
                  ? AppBar(
 | 
			
		||||
                    foregroundColor: appbarColor.value,
 | 
			
		||||
                    leading: PageBackButton(
 | 
			
		||||
                      color: appbarColor.value,
 | 
			
		||||
                      shadows: [appbarShadow],
 | 
			
		||||
                    ),
 | 
			
		||||
                    flexibleSpace: Stack(
 | 
			
		||||
                      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),
 | 
			
		||||
                              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(
 | 
			
		||||
                        Positioned.fill(
 | 
			
		||||
                          child:
 | 
			
		||||
                              data.profile.background?.id != null
 | 
			
		||||
                                  ? CloudImageWidget(
 | 
			
		||||
                                    file: data.profile.background,
 | 
			
		||||
                                  )
 | 
			
		||||
                                  : Container(
 | 
			
		||||
                                    color:
 | 
			
		||||
                                        appbarColor.value ??
 | 
			
		||||
                                        Theme.of(
 | 
			
		||||
                                          context,
 | 
			
		||||
                                        ).appBarTheme.foregroundColor,
 | 
			
		||||
                                    shadows: [appbarShadow],
 | 
			
		||||
                                        ).appBarTheme.backgroundColor,
 | 
			
		||||
                                  ),
 | 
			
		||||
                                ),
 | 
			
		||||
                              ),
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                        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: _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,
 | 
			
		||||
                        FlexibleSpaceBar(
 | 
			
		||||
                          title: Text(
 | 
			
		||||
                            data.nick,
 | 
			
		||||
                            style: TextStyle(
 | 
			
		||||
                              color:
 | 
			
		||||
                                  appbarColor.value ??
 | 
			
		||||
                                  Theme.of(context).appBarTheme.foregroundColor,
 | 
			
		||||
                              shadows: [appbarShadow],
 | 
			
		||||
                            ),
 | 
			
		||||
                          ).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, stackTrace) => AppScaffold(
 | 
			
		||||
            appBar: AppBar(leading: const PageBackButton()),
 | 
			
		||||
 
 | 
			
		||||
@@ -762,5 +762,127 @@ class _AccountBotDeveloperProviderElement
 | 
			
		||||
  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: 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: () {
 | 
			
		||||
            Navigator.pop(context, true);
 | 
			
		||||
            if (data.account?.name != null) {
 | 
			
		||||
              Navigator.pop(context, true);
 | 
			
		||||
              context.pushNamed(
 | 
			
		||||
                'accountProfile',
 | 
			
		||||
                pathParameters: {'name': data.account!.name},
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user