✨ Large screen support
This commit is contained in:
		
							
								
								
									
										171
									
								
								lib/router.dart
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								lib/router.dart
									
									
									
									
									
								
							| @@ -31,11 +31,49 @@ abstract class AppRouter { | |||||||
|           showSidebar: false, |           showSidebar: false, | ||||||
|           child: child, |           child: child, | ||||||
|         ), |         ), | ||||||
|  |         routes: [ | ||||||
|  |           ShellRoute( | ||||||
|  |             builder: (context, state, child) => BasicShell( | ||||||
|  |               state: state, | ||||||
|  |               sidebarFirst: true, | ||||||
|  |               showAppBar: false, | ||||||
|  |               sidebar: const SocialScreen(), | ||||||
|  |               child: child, | ||||||
|  |             ), | ||||||
|             routes: [ |             routes: [ | ||||||
|               GoRoute( |               GoRoute( | ||||||
|                 path: '/', |                 path: '/', | ||||||
|                 name: 'social', |                 name: 'social', | ||||||
|             builder: (context, state) => const SocialScreen(), |                 builder: (context, state) => | ||||||
|  |                     SolianTheme.isExtraLargeScreen(context) | ||||||
|  |                         ? const EmptyPagePlaceholder() | ||||||
|  |                         : const SocialScreen(), | ||||||
|  |               ), | ||||||
|  |               GoRoute( | ||||||
|  |                 path: '/posts/view/:alias', | ||||||
|  |                 name: 'postDetail', | ||||||
|  |                 builder: (context, state) => TitleShell( | ||||||
|  |                   showAppBar: SolianTheme.isExtraLargeScreen(context), | ||||||
|  |                   state: state, | ||||||
|  |                   child: PostDetailScreen( | ||||||
|  |                     alias: state.pathParameters['alias']!, | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |               GoRoute( | ||||||
|  |                 path: '/posts/publish', | ||||||
|  |                 name: 'postPublishing', | ||||||
|  |                 builder: (context, state) { | ||||||
|  |                   final arguments = state.extra as PostPublishingArguments?; | ||||||
|  |                   return PostPublishingScreen( | ||||||
|  |                     edit: arguments?.edit, | ||||||
|  |                     reply: arguments?.reply, | ||||||
|  |                     repost: arguments?.repost, | ||||||
|  |                     realm: arguments?.realm, | ||||||
|  |                   ); | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|           ), |           ), | ||||||
|           ShellRoute( |           ShellRoute( | ||||||
|             builder: (context, state, child) => BasicShell( |             builder: (context, state, child) => BasicShell( | ||||||
| @@ -49,7 +87,8 @@ abstract class AppRouter { | |||||||
|               GoRoute( |               GoRoute( | ||||||
|                 path: '/chat', |                 path: '/chat', | ||||||
|                 name: 'chat', |                 name: 'chat', | ||||||
|                 builder: (context, state) => SolianTheme.isExtraLargeScreen(context) |                 builder: (context, state) => | ||||||
|  |                     SolianTheme.isExtraLargeScreen(context) | ||||||
|                         ? const EmptyPagePlaceholder() |                         ? const EmptyPagePlaceholder() | ||||||
|                         : const ChatScreen(), |                         : const ChatScreen(), | ||||||
|               ), |               ), | ||||||
| @@ -92,78 +131,34 @@ abstract class AppRouter { | |||||||
|               ), |               ), | ||||||
|             ], |             ], | ||||||
|           ), |           ), | ||||||
|  |           ShellRoute( | ||||||
|  |             builder: (context, state, child) => BasicShell( | ||||||
|  |               state: state, | ||||||
|  |               sidebarFirst: true, | ||||||
|  |               showAppBar: false, | ||||||
|  |               sidebar: const RealmListScreen(), | ||||||
|  |               child: child, | ||||||
|  |             ), | ||||||
|  |             routes: [ | ||||||
|               GoRoute( |               GoRoute( | ||||||
|                 path: '/realms', |                 path: '/realms', | ||||||
|                 name: 'realms', |                 name: 'realms', | ||||||
|             builder: (context, state) => const RealmListScreen(), |                 builder: (context, state) => | ||||||
|  |                     SolianTheme.isExtraLargeScreen(context) | ||||||
|  |                         ? const EmptyPagePlaceholder() | ||||||
|  |                         : const RealmListScreen(), | ||||||
|               ), |               ), | ||||||
|           GoRoute( |  | ||||||
|             path: '/account', |  | ||||||
|             name: 'account', |  | ||||||
|             builder: (context, state) => const AccountScreen(), |  | ||||||
|           ), |  | ||||||
|         ], |  | ||||||
|       ), |  | ||||||
|       ShellRoute( |  | ||||||
|         builder: (context, state, child) => |  | ||||||
|             BasicShell(state: state, child: child), |  | ||||||
|         routes: [ |  | ||||||
|           GoRoute( |  | ||||||
|             path: '/posts/view/:alias', |  | ||||||
|             name: 'postDetail', |  | ||||||
|             builder: (context, state) => PostDetailScreen( |  | ||||||
|               alias: state.pathParameters['alias']!, |  | ||||||
|             ), |  | ||||||
|           ), |  | ||||||
|         ], |  | ||||||
|       ), |  | ||||||
|       GoRoute( |  | ||||||
|         path: '/posts/publish', |  | ||||||
|         name: 'postPublishing', |  | ||||||
|         builder: (context, state) { |  | ||||||
|           final arguments = state.extra as PostPublishingArguments?; |  | ||||||
|           return PostPublishingScreen( |  | ||||||
|             edit: arguments?.edit, |  | ||||||
|             reply: arguments?.reply, |  | ||||||
|             repost: arguments?.repost, |  | ||||||
|             realm: arguments?.realm, |  | ||||||
|           ); |  | ||||||
|         }, |  | ||||||
|       ), |  | ||||||
|       ShellRoute( |  | ||||||
|         builder: (context, state, child) => |  | ||||||
|             BasicShell(state: state, child: child), |  | ||||||
|         routes: [ |  | ||||||
|           GoRoute( |  | ||||||
|             path: '/account/friend', |  | ||||||
|             name: 'accountFriend', |  | ||||||
|             builder: (context, state) => const FriendScreen(), |  | ||||||
|           ), |  | ||||||
|           GoRoute( |  | ||||||
|             path: '/account/personalize', |  | ||||||
|             name: 'accountPersonalize', |  | ||||||
|             builder: (context, state) => const PersonalizeScreen(), |  | ||||||
|           ), |  | ||||||
|           GoRoute( |  | ||||||
|             path: '/about', |  | ||||||
|             name: 'about', |  | ||||||
|             builder: (context, state) => const AboutScreen(), |  | ||||||
|           ), |  | ||||||
|         ], |  | ||||||
|       ), |  | ||||||
|       ShellRoute( |  | ||||||
|         builder: (context, state, child) => |  | ||||||
|             BasicShell(state: state, child: child), |  | ||||||
|         routes: [ |  | ||||||
|               GoRoute( |               GoRoute( | ||||||
|                 path: '/realms/:alias/detail', |                 path: '/realms/:alias/detail', | ||||||
|                 name: 'realmDetail', |                 name: 'realmDetail', | ||||||
|             builder: (context, state) => RealmDetailScreen( |                 builder: (context, state) => TitleShell( | ||||||
|  |                   showAppBar: SolianTheme.isExtraLargeScreen(context), | ||||||
|  |                   state: state, | ||||||
|  |                   child: RealmDetailScreen( | ||||||
|                     realm: state.extra as Realm, |                     realm: state.extra as Realm, | ||||||
|                     alias: state.pathParameters['alias']!, |                     alias: state.pathParameters['alias']!, | ||||||
|                   ), |                   ), | ||||||
|                 ), |                 ), | ||||||
|         ], |  | ||||||
|               ), |               ), | ||||||
|               GoRoute( |               GoRoute( | ||||||
|                 path: '/realm/organize', |                 path: '/realm/organize', | ||||||
| @@ -185,5 +180,55 @@ abstract class AppRouter { | |||||||
|                 }, |                 }, | ||||||
|               ), |               ), | ||||||
|             ], |             ], | ||||||
|  |           ), | ||||||
|  |           ShellRoute( | ||||||
|  |             builder: (context, state, child) => BasicShell( | ||||||
|  |               state: state, | ||||||
|  |               sidebarFirst: true, | ||||||
|  |               showAppBar: false, | ||||||
|  |               sidebar: const AccountScreen(), | ||||||
|  |               child: child, | ||||||
|  |             ), | ||||||
|  |             routes: [ | ||||||
|  |               GoRoute( | ||||||
|  |                 path: '/account', | ||||||
|  |                 name: 'account', | ||||||
|  |                 builder: (context, state) => | ||||||
|  |                     SolianTheme.isExtraLargeScreen(context) | ||||||
|  |                         ? const EmptyPagePlaceholder() | ||||||
|  |                         : const AccountScreen(), | ||||||
|  |               ), | ||||||
|  |               GoRoute( | ||||||
|  |                 path: '/account/friend', | ||||||
|  |                 name: 'accountFriend', | ||||||
|  |                 builder: (context, state) => TitleShell( | ||||||
|  |                   showAppBar: SolianTheme.isExtraLargeScreen(context), | ||||||
|  |                   state: state, | ||||||
|  |                   child: const FriendScreen(), | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |               GoRoute( | ||||||
|  |                 path: '/account/personalize', | ||||||
|  |                 name: 'accountPersonalize', | ||||||
|  |                 builder: (context, state) => TitleShell( | ||||||
|  |                   showAppBar: SolianTheme.isExtraLargeScreen(context), | ||||||
|  |                   state: state, | ||||||
|  |                   child: const PersonalizeScreen(), | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |               GoRoute( | ||||||
|  |                 path: '/about', | ||||||
|  |                 name: 'about', | ||||||
|  |                 builder: (context, state) => TitleShell( | ||||||
|  |                   showAppBar: SolianTheme.isExtraLargeScreen(context), | ||||||
|  |                   state: state, | ||||||
|  |                   child: const AboutScreen(), | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|  |           ), | ||||||
|  |         ], | ||||||
|  |       ), | ||||||
|  |     ], | ||||||
|   ); |   ); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -12,6 +12,8 @@ class AboutScreen extends StatelessWidget { | |||||||
|  |  | ||||||
|     return Material( |     return Material( | ||||||
|       color: Theme.of(context).colorScheme.surface, |       color: Theme.of(context).colorScheme.surface, | ||||||
|  |       child: SizedBox( | ||||||
|  |         width: double.infinity, | ||||||
|         child: Column( |         child: Column( | ||||||
|           mainAxisAlignment: MainAxisAlignment.center, |           mainAxisAlignment: MainAxisAlignment.center, | ||||||
|           children: [ |           children: [ | ||||||
| @@ -64,6 +66,7 @@ class AboutScreen extends StatelessWidget { | |||||||
|             ), |             ), | ||||||
|           ], |           ], | ||||||
|         ), |         ), | ||||||
|  |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -76,7 +76,7 @@ class SolianMessages extends Translations { | |||||||
|           'postInRealm': 'In realm @realm', |           'postInRealm': 'In realm @realm', | ||||||
|           'postDetail': 'Post', |           'postDetail': 'Post', | ||||||
|           'postReplies': 'Replies', |           'postReplies': 'Replies', | ||||||
|           'postPublishing': 'Post post', |           'postPublishing': 'Post a post', | ||||||
|           'postIdentityNotify': 'You will post this post as', |           'postIdentityNotify': 'You will post this post as', | ||||||
|           'postContentPlaceholder': 'What\'s happened?!', |           'postContentPlaceholder': 'What\'s happened?!', | ||||||
|           'postReaction': 'Reactions of the Post', |           'postReaction': 'Reactions of the Post', | ||||||
|   | |||||||
| @@ -1,13 +1,15 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:get/get.dart'; |  | ||||||
|  |  | ||||||
| class EmptyPagePlaceholder extends StatelessWidget { | class EmptyPagePlaceholder extends StatelessWidget { | ||||||
|   const EmptyPagePlaceholder({super.key}); |   const EmptyPagePlaceholder({super.key}); | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return Center( |     return Material( | ||||||
|  |       color: Theme.of(context).colorScheme.surface, | ||||||
|  |       child: Center( | ||||||
|         child: Image.asset('assets/logo.png', width: 80, height: 80), |         child: Image.asset('assets/logo.png', width: 80, height: 80), | ||||||
|  |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,13 +1,15 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:get/get.dart'; |  | ||||||
|  |  | ||||||
| class SidebarPlaceholder extends StatelessWidget { | class SidebarPlaceholder extends StatelessWidget { | ||||||
|   const SidebarPlaceholder({super.key}); |   const SidebarPlaceholder({super.key}); | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return const Center( |     return Material( | ||||||
|  |       color: Theme.of(context).colorScheme.surface, | ||||||
|  |       child: const Center( | ||||||
|         child: Icon(Icons.menu_open, size: 50), |         child: Icon(Icons.menu_open, size: 50), | ||||||
|  |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user