From aa43eaa0eb91afcf19f2f511ff2b905f54ef1533 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Fri, 12 Jul 2024 16:19:54 +0800 Subject: [PATCH] :recycle: Refactored navigation --- lib/router.dart | 6 +- lib/screens/articles/article_detail.dart | 2 +- lib/screens/articles/article_editor.dart | 2 - lib/screens/channel/call/call.dart | 2 - lib/screens/channel/channel_organize.dart | 2 - lib/screens/chat.dart | 2 - lib/screens/feed/draft_box.dart | 4 +- lib/screens/{feed.dart => home.dart} | 12 +- lib/screens/posts/post_detail.dart | 2 +- lib/screens/posts/post_editor.dart | 2 - lib/screens/realms.dart | 2 - lib/screens/realms/realm_organize.dart | 2 - lib/shells/basic_shell.dart | 6 - lib/shells/centered_shell.dart | 6 - lib/shells/root_shell.dart | 13 +- lib/shells/title_shell.dart | 9 -- lib/translations/en_us.dart | 1 + lib/translations/zh_cn.dart | 1 + lib/widgets/articles/article_list.dart | 2 +- lib/widgets/drawer_button.dart | 19 --- lib/widgets/feed/feed_list.dart | 4 +- lib/widgets/navigation/app_navigation.dart | 11 +- .../navigation/app_navigation_drawer.dart | 121 ++++++++++-------- .../navigation/app_navigation_rail.dart | 36 ------ lib/widgets/posts/post_list.dart | 2 +- lib/widgets/prev_page.dart | 19 --- ...ed_container.dart => sized_container.dart} | 22 ++++ 27 files changed, 115 insertions(+), 197 deletions(-) rename lib/screens/{feed.dart => home.dart} (93%) delete mode 100644 lib/widgets/drawer_button.dart delete mode 100644 lib/widgets/navigation/app_navigation_rail.dart delete mode 100644 lib/widgets/prev_page.dart rename lib/widgets/{centered_container.dart => sized_container.dart} (50%) diff --git a/lib/router.dart b/lib/router.dart index ea29901..95359db 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -17,7 +17,7 @@ import 'package:solian/screens/realms.dart'; import 'package:solian/screens/realms/realm_detail.dart'; import 'package:solian/screens/realms/realm_organize.dart'; import 'package:solian/screens/realms/realm_view.dart'; -import 'package:solian/screens/feed.dart'; +import 'package:solian/screens/home.dart'; import 'package:solian/screens/posts/post_editor.dart'; import 'package:solian/shells/basic_shell.dart'; import 'package:solian/shells/root_shell.dart'; @@ -48,8 +48,8 @@ abstract class AppRouter { routes: [ GoRoute( path: '/', - name: 'feed', - builder: (context, state) => const FeedScreen(), + name: 'home', + builder: (context, state) => const HomeScreen(), ), GoRoute( path: '/feed/search', diff --git a/lib/screens/articles/article_detail.dart b/lib/screens/articles/article_detail.dart index 0430bff..051acb3 100644 --- a/lib/screens/articles/article_detail.dart +++ b/lib/screens/articles/article_detail.dart @@ -4,7 +4,7 @@ import 'package:solian/exts.dart'; import 'package:solian/models/articles.dart'; import 'package:solian/providers/content/feed.dart'; import 'package:solian/widgets/articles/article_item.dart'; -import 'package:solian/widgets/centered_container.dart'; +import 'package:solian/widgets/sized_container.dart'; class ArticleDetailScreen extends StatefulWidget { final String alias; diff --git a/lib/screens/articles/article_editor.dart b/lib/screens/articles/article_editor.dart index ea62d43..b7ee146 100644 --- a/lib/screens/articles/article_editor.dart +++ b/lib/screens/articles/article_editor.dart @@ -10,7 +10,6 @@ import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/attachments/attachment_publish.dart'; import 'package:solian/widgets/feed/feed_tags_field.dart'; -import 'package:solian/widgets/prev_page.dart'; import 'package:textfield_tags/textfield_tags.dart'; import 'package:badges/badges.dart' as badges; @@ -133,7 +132,6 @@ class _ArticlePublishScreenState extends State { title: AppBarTitle('articlePublish'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: const PrevPageButton(), actions: [ TextButton( onPressed: _isBusy ? null : () => applyPost(), diff --git a/lib/screens/channel/call/call.dart b/lib/screens/channel/call/call.dart index 1dc8a2b..7183678 100644 --- a/lib/screens/channel/call/call.dart +++ b/lib/screens/channel/call/call.dart @@ -7,7 +7,6 @@ import 'package:solian/providers/content/call.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/chat/call/call_controls.dart'; import 'package:solian/widgets/chat/call/call_participant.dart'; -import 'package:solian/widgets/prev_page.dart'; class CallScreen extends StatefulWidget { const CallScreen({super.key}); @@ -72,7 +71,6 @@ class _CallScreenState extends State { ), ]), ), - leading: const PrevPageButton(), ), body: SafeArea( child: Obx( diff --git a/lib/screens/channel/channel_organize.dart b/lib/screens/channel/channel_organize.dart index ad2892c..d85a2b2 100644 --- a/lib/screens/channel/channel_organize.dart +++ b/lib/screens/channel/channel_organize.dart @@ -9,7 +9,6 @@ import 'package:solian/providers/content/channel.dart'; import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; -import 'package:solian/widgets/prev_page.dart'; import 'package:uuid/uuid.dart'; class ChannelOrganizeArguments { @@ -112,7 +111,6 @@ class _ChannelOrganizeScreenState extends State { title: AppBarTitle('channelOrganizing'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: const PrevPageButton(), actions: [ TextButton( onPressed: _isBusy ? null : () => applyChannel(), diff --git a/lib/screens/chat.dart b/lib/screens/chat.dart index 16e9380..9af84b2 100644 --- a/lib/screens/chat.dart +++ b/lib/screens/chat.dart @@ -12,7 +12,6 @@ import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/channel/channel_list.dart'; import 'package:solian/widgets/chat/call/chat_call_indicator.dart'; import 'package:solian/widgets/current_state_action.dart'; -import 'package:solian/widgets/drawer_button.dart' as drawer; class ChatScreen extends StatefulWidget { const ChatScreen({super.key}); @@ -95,7 +94,6 @@ class _ChatScreenState extends State { title: AppBarTitle('chat'.tr), centerTitle: false, floating: true, - leading: const drawer.DrawerButton(), toolbarHeight: SolianTheme.toolbarHeight(context), actions: [ const BackgroundStateWidget(), diff --git a/lib/screens/feed/draft_box.dart b/lib/screens/feed/draft_box.dart index ed6b784..81dfce7 100644 --- a/lib/screens/feed/draft_box.dart +++ b/lib/screens/feed/draft_box.dart @@ -6,14 +6,13 @@ import 'package:solian/models/feed.dart'; import 'package:solian/models/pagination.dart'; import 'package:solian/models/post.dart'; import 'package:solian/providers/content/feed.dart'; -import 'package:solian/screens/feed.dart'; +import 'package:solian/screens/home.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/articles/article_action.dart'; import 'package:solian/widgets/articles/article_owned_list.dart'; import 'package:solian/widgets/posts/post_action.dart'; import 'package:solian/widgets/posts/post_owned_list.dart'; -import 'package:solian/widgets/prev_page.dart'; class DraftBoxScreen extends StatefulWidget { const DraftBoxScreen({super.key}); @@ -66,7 +65,6 @@ class _DraftBoxScreenState extends State { title: AppBarTitle('draftBox'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: const PrevPageButton(), actions: [ FeedCreationButton( hideDraftBox: true, diff --git a/lib/screens/feed.dart b/lib/screens/home.dart similarity index 93% rename from lib/screens/feed.dart rename to lib/screens/home.dart index 102298f..5b82816 100644 --- a/lib/screens/feed.dart +++ b/lib/screens/home.dart @@ -11,16 +11,15 @@ import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/current_state_action.dart'; import 'package:solian/widgets/feed/feed_list.dart'; -import 'package:solian/widgets/drawer_button.dart' as drawer; -class FeedScreen extends StatefulWidget { - const FeedScreen({super.key}); +class HomeScreen extends StatefulWidget { + const HomeScreen({super.key}); @override - State createState() => _FeedScreenState(); + State createState() => _HomeScreenState(); } -class _FeedScreenState extends State { +class _HomeScreenState extends State { final PagingController _pagingController = PagingController(firstPageKey: 0); @@ -60,11 +59,10 @@ class _FeedScreenState extends State { child: CustomScrollView( slivers: [ SliverAppBar( - title: AppBarTitle('feed'.tr), + title: AppBarTitle('home'.tr), centerTitle: false, floating: true, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: const drawer.DrawerButton(), actions: [ const BackgroundStateWidget(), const NotificationButton(), diff --git a/lib/screens/posts/post_detail.dart b/lib/screens/posts/post_detail.dart index d325044..72f0a4a 100644 --- a/lib/screens/posts/post_detail.dart +++ b/lib/screens/posts/post_detail.dart @@ -3,7 +3,7 @@ import 'package:get/get.dart'; import 'package:solian/exts.dart'; import 'package:solian/models/post.dart'; import 'package:solian/providers/content/feed.dart'; -import 'package:solian/widgets/centered_container.dart'; +import 'package:solian/widgets/sized_container.dart'; import 'package:solian/widgets/posts/post_item.dart'; import 'package:solian/widgets/posts/post_replies.dart'; diff --git a/lib/screens/posts/post_editor.dart b/lib/screens/posts/post_editor.dart index 4c603a0..44bfc6b 100644 --- a/lib/screens/posts/post_editor.dart +++ b/lib/screens/posts/post_editor.dart @@ -12,7 +12,6 @@ import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/attachments/attachment_publish.dart'; import 'package:solian/widgets/posts/post_item.dart'; import 'package:solian/widgets/feed/feed_tags_field.dart'; -import 'package:solian/widgets/prev_page.dart'; import 'package:textfield_tags/textfield_tags.dart'; import 'package:badges/badges.dart' as badges; @@ -137,7 +136,6 @@ class _PostPublishScreenState extends State { title: AppBarTitle('postPublish'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: const PrevPageButton(), actions: [ TextButton( onPressed: _isBusy ? null : () => applyPost(), diff --git a/lib/screens/realms.dart b/lib/screens/realms.dart index 0ea9c4e..8cc8bb1 100644 --- a/lib/screens/realms.dart +++ b/lib/screens/realms.dart @@ -11,7 +11,6 @@ import 'package:solian/theme.dart'; import 'package:solian/widgets/account/signin_required_overlay.dart'; import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/current_state_action.dart'; -import 'package:solian/widgets/drawer_button.dart' as drawer; class RealmListScreen extends StatefulWidget { const RealmListScreen({super.key}); @@ -80,7 +79,6 @@ class _RealmListScreenState extends State { title: AppBarTitle('realm'.tr), centerTitle: false, floating: true, - leading: const drawer.DrawerButton(), toolbarHeight: SolianTheme.toolbarHeight(context), actions: [ const BackgroundStateWidget(), diff --git a/lib/screens/realms/realm_organize.dart b/lib/screens/realms/realm_organize.dart index 68aa8da..7e8bedc 100644 --- a/lib/screens/realms/realm_organize.dart +++ b/lib/screens/realms/realm_organize.dart @@ -7,7 +7,6 @@ import 'package:solian/providers/auth.dart'; import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; -import 'package:solian/widgets/prev_page.dart'; import 'package:uuid/uuid.dart'; class RealmOrganizeArguments { @@ -102,7 +101,6 @@ class _RealmOrganizeScreenState extends State { title: AppBarTitle('realmOrganizing'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: const PrevPageButton(), actions: [ TextButton( onPressed: _isBusy ? null : () => applyRealm(), diff --git a/lib/shells/basic_shell.dart b/lib/shells/basic_shell.dart index ec596ca..6657589 100644 --- a/lib/shells/basic_shell.dart +++ b/lib/shells/basic_shell.dart @@ -1,10 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:go_router/go_router.dart'; -import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; -import 'package:solian/widgets/prev_page.dart'; import 'package:solian/widgets/sidebar/sidebar_placeholder.dart'; class BasicShell extends StatelessWidget { @@ -42,16 +40,12 @@ class BasicShell extends StatelessWidget { @override Widget build(BuildContext context) { - final canPop = AppRouter.instance.canPop(); - return Scaffold( appBar: showAppBar ? AppBar( title: AppBarTitle(state.topRoute?.name?.tr ?? 'page'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: canPop ? const PrevPageButton() : null, - automaticallyImplyLeading: false, ) : null, body: SolianTheme.isLargeScreen(context) diff --git a/lib/shells/centered_shell.dart b/lib/shells/centered_shell.dart index 6d06f86..51c23ad 100644 --- a/lib/shells/centered_shell.dart +++ b/lib/shells/centered_shell.dart @@ -1,10 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:go_router/go_router.dart'; -import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; -import 'package:solian/widgets/prev_page.dart'; class CenteredShell extends StatelessWidget { final bool showAppBar; @@ -20,16 +18,12 @@ class CenteredShell extends StatelessWidget { @override Widget build(BuildContext context) { - final canPop = AppRouter.instance.canPop(); - return Scaffold( appBar: showAppBar ? AppBar( title: AppBarTitle(state.topRoute?.name?.tr ?? 'page'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: canPop ? const PrevPageButton() : null, - automaticallyImplyLeading: false, ) : null, body: Center( diff --git a/lib/shells/root_shell.dart b/lib/shells/root_shell.dart index 914284a..b45dc07 100644 --- a/lib/shells/root_shell.dart +++ b/lib/shells/root_shell.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/navigation/app_navigation_drawer.dart'; -import 'package:solian/widgets/navigation/app_navigation_rail.dart'; final GlobalKey rootScaffoldKey = GlobalKey(); @@ -32,14 +31,16 @@ class RootShell extends StatelessWidget { return Scaffold( key: rootScaffoldKey, - drawer: AppNavigationDrawer( - key: const ValueKey('navigation-drawer'), - routeName: routeName, - ), + drawer: SolianTheme.isLargeScreen(context) + ? null + : AppNavigationDrawer( + key: const ValueKey('navigation-drawer'), + routeName: routeName, + ), body: SolianTheme.isLargeScreen(context) ? Row( children: [ - if (showNavigation) const AppNavigationRail(), + if (showNavigation) AppNavigationDrawer(routeName: routeName), if (showNavigation) const VerticalDivider(thickness: 0.3, width: 1), Expanded(child: child), diff --git a/lib/shells/title_shell.dart b/lib/shells/title_shell.dart index 331335c..2d69b68 100644 --- a/lib/shells/title_shell.dart +++ b/lib/shells/title_shell.dart @@ -1,11 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:go_router/go_router.dart'; -import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; -import 'package:solian/widgets/prev_page.dart' as prev; -import 'package:solian/widgets/drawer_button.dart' as drawer; class TitleShell extends StatelessWidget { final bool showAppBar; @@ -21,18 +18,12 @@ class TitleShell extends StatelessWidget { @override Widget build(BuildContext context) { - final canPop = AppRouter.instance.canPop(); - return Scaffold( appBar: showAppBar ? AppBar( title: AppBarTitle(state.topRoute?.name?.tr ?? 'page'.tr), centerTitle: false, toolbarHeight: SolianTheme.toolbarHeight(context), - leading: canPop - ? const prev.PrevPageButton() - : const drawer.DrawerButton(), - automaticallyImplyLeading: false, ) : null, body: child, diff --git a/lib/translations/en_us.dart b/lib/translations/en_us.dart index b7e8b42..446194b 100644 --- a/lib/translations/en_us.dart +++ b/lib/translations/en_us.dart @@ -5,6 +5,7 @@ const messagesEnglish = { 'next': 'Next', 'reset': 'Reset', 'page': 'Page', + 'home': 'Home', 'draft': 'Draft', 'draftSave': 'Save', 'draftBox': 'Draft Box', diff --git a/lib/translations/zh_cn.dart b/lib/translations/zh_cn.dart index b5368c1..7032579 100644 --- a/lib/translations/zh_cn.dart +++ b/lib/translations/zh_cn.dart @@ -2,6 +2,7 @@ const simplifiedChineseMessages = { 'done': '完成', 'hide': '隐藏', 'okay': '确认', + 'home': '首页', 'next': '下一步', 'reset': '重置', 'cancel': '取消', diff --git a/lib/widgets/articles/article_list.dart b/lib/widgets/articles/article_list.dart index bab8a33..559a115 100644 --- a/lib/widgets/articles/article_list.dart +++ b/lib/widgets/articles/article_list.dart @@ -5,7 +5,7 @@ import 'package:solian/models/articles.dart'; import 'package:solian/router.dart'; import 'package:solian/widgets/articles/article_action.dart'; import 'package:solian/widgets/articles/article_item.dart'; -import 'package:solian/widgets/centered_container.dart'; +import 'package:solian/widgets/sized_container.dart'; class ArticleListWidget extends StatelessWidget { final bool isShowEmbed; diff --git a/lib/widgets/drawer_button.dart b/lib/widgets/drawer_button.dart deleted file mode 100644 index 45e3e74..0000000 --- a/lib/widgets/drawer_button.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:solian/shells/root_shell.dart'; - -class DrawerButton extends StatelessWidget { - const DrawerButton({super.key}); - - void openDrawer() { - rootScaffoldKey.currentState!.openDrawer(); - } - - @override - Widget build(BuildContext context) { - return IconButton( - icon: const Icon(Icons.menu), - tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip, - onPressed: openDrawer, - ); - } -} diff --git a/lib/widgets/feed/feed_list.dart b/lib/widgets/feed/feed_list.dart index 3fd5b5f..d9c09b1 100644 --- a/lib/widgets/feed/feed_list.dart +++ b/lib/widgets/feed/feed_list.dart @@ -4,7 +4,7 @@ import 'package:solian/models/articles.dart'; import 'package:solian/models/feed.dart'; import 'package:solian/models/post.dart'; import 'package:solian/widgets/articles/article_list.dart'; -import 'package:solian/widgets/centered_container.dart'; +import 'package:solian/widgets/sized_container.dart'; import 'package:solian/widgets/posts/post_list.dart'; class FeedListWidget extends StatelessWidget { @@ -28,7 +28,7 @@ class FeedListWidget extends StatelessWidget { pagingController: controller, builderDelegate: PagedChildBuilderDelegate( itemBuilder: (context, item, index) { - return CenteredContainer( + return SizedContainer( child: Builder( builder: (context) { switch (item.type) { diff --git a/lib/widgets/navigation/app_navigation.dart b/lib/widgets/navigation/app_navigation.dart index 31c5cfd..4e08d6f 100644 --- a/lib/widgets/navigation/app_navigation.dart +++ b/lib/widgets/navigation/app_navigation.dart @@ -4,9 +4,9 @@ import 'package:get/utils.dart'; abstract class AppNavigation { static List destinations = [ AppNavigationDestination( - icon: const Icon(Icons.feed), - label: 'feed'.tr, - page: 'feed', + icon: const Icon(Icons.home), + label: 'home'.tr, + page: 'home', ), AppNavigationDestination( icon: const Icon(Icons.forum), @@ -18,11 +18,6 @@ abstract class AppNavigation { label: 'realms'.tr, page: 'realms', ), - AppNavigationDestination( - icon: const Icon(Icons.account_circle), - label: 'account'.tr, - page: 'account', - ), ]; static List get destinationPages => diff --git a/lib/widgets/navigation/app_navigation_drawer.dart b/lib/widgets/navigation/app_navigation_drawer.dart index f11b774..46283b5 100644 --- a/lib/widgets/navigation/app_navigation_drawer.dart +++ b/lib/widgets/navigation/app_navigation_drawer.dart @@ -20,7 +20,7 @@ class AppNavigationDrawer extends StatefulWidget { } class _AppNavigationDrawerState extends State { - int _selectedIndex = 0; + int? _selectedIndex = 0; AccountStatus? _accountStatus; void getStatus() async { @@ -40,7 +40,11 @@ class _AppNavigationDrawerState extends State { final nameList = AppNavigation.destinations.map((x) => x.page).toList(); final idx = nameList.indexOf(widget.routeName!); - _selectedIndex = idx != -1 ? idx : 0; + _selectedIndex = idx != -1 ? idx : null; + } + + void closeDrawer() { + rootScaffoldKey.currentState!.closeDrawer(); } @override @@ -65,7 +69,7 @@ class _AppNavigationDrawerState extends State { onDestinationSelected: (idx) { setState(() => _selectedIndex = idx); AppRouter.instance.goNamed(AppNavigation.destinations[idx].page); - rootScaffoldKey.currentState!.closeDrawer(); + closeDrawer(); }, children: [ FutureBuilder( @@ -75,67 +79,74 @@ class _AppNavigationDrawerState extends State { return const SizedBox(); } - return Column( - children: [ - ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 24), - title: Text(snapshot.data!.body['nick']), - subtitle: Builder( - builder: (context) { - if (_accountStatus == null) { - return Text('loading'.tr); - } - final info = StatusProvider.determineStatus( + return ListTile( + contentPadding: const EdgeInsets.symmetric(horizontal: 24), + title: Text(snapshot.data!.body['nick']), + subtitle: Builder( + builder: (context) { + if (_accountStatus == null) { + return Text('loading'.tr); + } + final info = StatusProvider.determineStatus( + _accountStatus!, + ); + return Text(info.$3); + }, + ), + leading: Builder(builder: (context) { + final badgeColor = _accountStatus != null + ? StatusProvider.determineStatus( _accountStatus!, - ); - return Text(info.$3); - }, - ), - leading: Builder(builder: (context) { - final badgeColor = _accountStatus != null - ? StatusProvider.determineStatus( - _accountStatus!, - ).$2 - : Colors.grey; + ).$2 + : Colors.grey; - return badges.Badge( - showBadge: _accountStatus != null, - badgeStyle: badges.BadgeStyle(badgeColor: badgeColor), - position: badges.BadgePosition.bottomEnd( - bottom: 0, - end: -2, - ), - child: AccountAvatar( - content: snapshot.data!.body['avatar'], - ), - ); - }), - onTap: () { - showModalBottomSheet( - useRootNavigator: true, - context: context, - builder: (context) => AccountStatusAction( - currentStatus: _accountStatus!.status, - ), - ).then((val) { - if (val == true) getStatus(); - }); - }, - ), - const Divider(thickness: 0.3, height: 1).paddingOnly( - bottom: 16, - top: 8, - ), - ], - ); + return badges.Badge( + showBadge: _accountStatus != null, + badgeStyle: badges.BadgeStyle(badgeColor: badgeColor), + position: badges.BadgePosition.bottomEnd( + bottom: 0, + end: -2, + ), + child: AccountAvatar( + content: snapshot.data!.body['avatar'], + ), + ); + }), + trailing: IconButton( + icon: const Icon(Icons.face_retouching_natural), + onPressed: () { + showModalBottomSheet( + useRootNavigator: true, + context: context, + builder: (context) => AccountStatusAction( + currentStatus: _accountStatus!.status, + ), + ).then((val) { + if (val == true) getStatus(); + }); + }, + ), + onTap: () { + AppRouter.instance.goNamed('account'); + closeDrawer(); + }, + ).paddingOnly(top: 8); }, ), + const Divider(thickness: 0.3, height: 1).paddingOnly( + bottom: 12, + top: 8, + ), ...AppNavigation.destinations.map( (e) => NavigationDrawerDestination( icon: e.icon, label: Text(e.label), ), - ) + ), + const Divider(thickness: 0.3, height: 1).paddingOnly( + top: 12, + bottom: 8, + ), ], ); } diff --git a/lib/widgets/navigation/app_navigation_rail.dart b/lib/widgets/navigation/app_navigation_rail.dart deleted file mode 100644 index 406edf1..0000000 --- a/lib/widgets/navigation/app_navigation_rail.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:solian/router.dart'; -import 'package:solian/widgets/navigation/app_navigation.dart'; - -class AppNavigationRail extends StatefulWidget { - const AppNavigationRail({super.key}); - - @override - State createState() => _AppNavigationRailState(); -} - -class _AppNavigationRailState extends State { - int _selectedIndex = 0; - - @override - Widget build(BuildContext context) { - return NavigationRail( - destinations: AppNavigation.destinations - .map( - (e) => NavigationRailDestination( - icon: e.icon, - label: Text(e.label), - ), - ) - .toList(), - groupAlignment: 0, - labelType: NavigationRailLabelType.all, - selectedIndex: _selectedIndex, - onDestinationSelected: (idx) { - setState(() => _selectedIndex = idx); - AppRouter.instance - .pushReplacementNamed(AppNavigation.destinations[idx].page); - }, - ); - } -} diff --git a/lib/widgets/posts/post_list.dart b/lib/widgets/posts/post_list.dart index 7a718bf..10c5c37 100644 --- a/lib/widgets/posts/post_list.dart +++ b/lib/widgets/posts/post_list.dart @@ -3,7 +3,7 @@ import 'package:get/get.dart'; import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import 'package:solian/models/post.dart'; import 'package:solian/router.dart'; -import 'package:solian/widgets/centered_container.dart'; +import 'package:solian/widgets/sized_container.dart'; import 'package:solian/widgets/posts/post_action.dart'; import 'package:solian/widgets/posts/post_item.dart'; diff --git a/lib/widgets/prev_page.dart b/lib/widgets/prev_page.dart deleted file mode 100644 index e1b5f1f..0000000 --- a/lib/widgets/prev_page.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:solian/router.dart'; - -class PrevPageButton extends StatelessWidget { - const PrevPageButton({super.key}); - - @override - Widget build(BuildContext context) { - return IconButton( - icon: const Icon(Icons.arrow_back), - tooltip: MaterialLocalizations.of(context).backButtonTooltip, - onPressed: () { - if (AppRouter.instance.canPop()) { - AppRouter.instance.pop(); - } - }, - ); - } -} diff --git a/lib/widgets/centered_container.dart b/lib/widgets/sized_container.dart similarity index 50% rename from lib/widgets/centered_container.dart rename to lib/widgets/sized_container.dart index 6f50c89..4e69996 100644 --- a/lib/widgets/centered_container.dart +++ b/lib/widgets/sized_container.dart @@ -1,5 +1,27 @@ import 'package:flutter/material.dart'; +class SizedContainer extends StatelessWidget { + final Widget child; + final double maxWidth; + + const SizedContainer({ + super.key, + required this.child, + this.maxWidth = 720, + }); + + @override + Widget build(BuildContext context) { + return Align( + alignment: Alignment.centerLeft, + child: Container( + constraints: BoxConstraints(maxWidth: maxWidth), + child: child, + ), + ); + } +} + class CenteredContainer extends StatelessWidget { final Widget child; final double maxWidth;