import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/user.dart'; import 'package:island/pods/network.dart'; import 'package:island/widgets/app_scaffold.dart'; import 'package:island/widgets/content/cloud_files.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'profile.g.dart'; @riverpod Future account(Ref ref, String uname) async { final apiClient = ref.watch(apiClientProvider); final resp = await apiClient.get("/accounts/$uname"); return SnAccount.fromJson(resp.data); } @RoutePage() class AccountProfileScreen extends HookConsumerWidget { final String name; const AccountProfileScreen({ super.key, @PathParam("name") required this.name, }); @override Widget build(BuildContext context, WidgetRef ref) { final accountAsync = ref.watch(accountProvider(name)); return accountAsync.when( data: (data) => AppScaffold( body: CustomScrollView( slivers: [ SliverAppBar( expandedHeight: 180, pinned: true, flexibleSpace: FlexibleSpaceBar( background: data.profile.backgroundId != null ? CloudImageWidget( fileId: data.profile.backgroundId!, ) : Container( color: Theme.of(context).appBarTheme.backgroundColor, ), title: Text( data.name, style: TextStyle( color: Theme.of(context).appBarTheme.foregroundColor, shadows: [ Shadow( color: Colors.black54, blurRadius: 5.0, offset: Offset(1.0, 1.0), ), ], ), ), ), ), SliverToBoxAdapter( child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( data.profile.bio ?? '', style: const TextStyle(fontSize: 16), ), ], ), ), ), ], ), ), error: (error, stackTrace) => AppScaffold( appBar: AppBar(leading: const PageBackButton()), body: Center(child: Text(error.toString())), ), loading: () => AppScaffold( appBar: AppBar(leading: const PageBackButton()), body: Center(child: CircularProgressIndicator()), ), ); } }