Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 46 additions & 19 deletions lib/ui/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,21 @@ import 'package:go_router/go_router.dart';
import 'package:unn_mobile/core/misc/app_settings.dart';
import 'package:unn_mobile/ui/views/auth_page/auth_page.dart';
import 'package:unn_mobile/ui/views/loading_page/loading_page.dart';
import 'package:unn_mobile/ui/views/main_page/about/about.dart';
import 'package:unn_mobile/ui/views/main_page/donations/donations.dart';
import 'package:unn_mobile/ui/views/main_page/main_page.dart';
import 'package:unn_mobile/ui/views/main_page/main_page_routing.dart';
import 'package:unn_mobile/ui/views/main_page/settings/settings.dart';

const loadingPageRoute = '/loading';
const mainPageRoute = '/';
const loadingPageRoute = '/';
const mainPageRoute = '/main';
const authPageRoute = '/auth';
const drawerRoutePrefix = 'drawer';

const settingsPath = 'settings';
const aboutPath = 'about';
const supportPath = 'support';

final shellBranchKeys = [
for (final route in MainPageRouting.navbarRoutes)
(key: GlobalKey<NavigatorState>(), route: route),
Expand All @@ -25,6 +32,36 @@ final mainRouter = GoRouter(
initialLocation: loadingPageRoute,
initialExtra: <String, Object>{},
routes: [
GoRoute(
path: loadingPageRoute,
pageBuilder: (context, state) => const NoTransitionPage(
child: LoadingPage(),
),
),
GoRoute(
path: authPageRoute,
name: 'auth',
builder: (context, state) => const AuthPage(),
routes: [
GoRoute(
path: settingsPath,
name: 'settings',
builder: (_, __) => const SettingsScreenView(
hasAccount: false,
),
),
GoRoute(
path: aboutPath,
name: 'about',
builder: (_, __) => const AboutScreenView(),
),
GoRoute(
path: supportPath,
name: 'support',
builder: (_, __) => const DonationsScreenView(),
),
],
),
StatefulShellRoute.indexedStack(
builder: (context, state, shell) => MainPage(
key: mainPageKey,
Expand All @@ -36,7 +73,7 @@ final mainRouter = GoRouter(
navigatorKey: route.key,
routes: [
GoRoute(
path: route.route.pageRoute,
path: '$mainPageRoute${route.route.pagePath}',
name: route.route.pageTitle,
pageBuilder: (context, state) => NoTransitionPage(
child: route.route.builder(context, state),
Expand All @@ -53,28 +90,18 @@ final mainRouter = GoRouter(
),
],
),
GoRoute(
path: authPageRoute,
name: 'auth',
builder: (context, state) => const AuthPage(),
),
GoRoute(
path: loadingPageRoute,
pageBuilder: (context, state) => const NoTransitionPage(
child: LoadingPage(),
),
),
],
redirect: (context, state) {
if (state.uri.path == mainPageRoute) {
final pageIndex =
AppSettings.initialPage < MainPageRouting.activeNavbarRoutes.length
? AppSettings.initialPage
: 0;
return MainPageRouting.navbarRoutes
.where((r) => !r.isDisabled)
.toList()[pageIndex]
.pageRoute;
return mainPageRoute +
MainPageRouting.navbarRoutes
.where((r) => !r.isDisabled)
.toList()[pageIndex]
.pagePath;
}
return null;
},
Expand All @@ -87,7 +114,7 @@ List<GoRoute> _buildSubroutes(
routes
.map(
(route) => GoRoute(
path: '$prefix${route.pageRoute}',
path: '$prefix${route.pagePath}',
builder: (context, state) => route.builder(context, state),
routes: _buildSubroutes(route.subroutes),
),
Expand Down
62 changes: 51 additions & 11 deletions lib/ui/views/auth_page/auth_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,20 @@ import 'package:unn_mobile/ui/views/auth_page/widgets/auth_text_field.dart';
import 'package:unn_mobile/ui/views/base_view.dart';
import 'package:unn_mobile/ui/widgets/dialogs/analytics_confirm_dialog.dart';
import 'package:unn_mobile/ui/widgets/dialogs/changelog_dialog.dart';
import 'package:unn_mobile/ui/widgets/menu_button.dart';
import 'package:unn_mobile/ui/widgets/wide_button.dart';

enum _InputType {
login,
password,
}

class _MenuItemValues {
static const settings = 'settings';
static const about = 'about';
static const support = 'support';
}

class AuthPage extends StatefulWidget {
const AuthPage({super.key});

Expand Down Expand Up @@ -126,22 +133,55 @@ class _AuthPageState extends State<AuthPage> {

return Scaffold(
backgroundColor: theme.colorScheme.surfaceContainerLowest,
appBar: AppBar(
titleTextStyle: TextStyle(
fontSize: _titleFontSize,
height: _titleHeightFactor,
fontWeight: FontWeight.bold,
color: theme.colorScheme.primary,
),
centerTitle: true,
title: const Text(
_title,
),
actions: [
MenuButton(
enabled: true,
items: [
const SideMenuItem(
title: 'Настройки',
value: _MenuItemValues.settings,
),
const SideMenuItem(
title: 'Поддержать',
value: _MenuItemValues.support,
),
const SideMenuItem(
title: 'О нас',
value: _MenuItemValues.about,
),
],
onSelected: (item) {
switch (item) {
case _MenuItemValues.settings:
GoRouter.of(context).go('$authPageRoute/$settingsPath');
break;
case _MenuItemValues.about:
GoRouter.of(context).go('$authPageRoute/$aboutPath');
break;
case _MenuItemValues.support:
GoRouter.of(context).go('$authPageRoute/$supportPath');
break;
}
},
),
],
),
body: SafeArea(
bottom: false,
child: LayoutBuilder(
builder: (context, constraints) => Column(
children: [
const SizedBox(height: _titleTopPadding),
Text(
_title,
style: TextStyle(
fontFamily: 'Inter',
fontSize: _titleFontSize,
height: _titleHeightFactor,
fontWeight: FontWeight.bold,
color: theme.colorScheme.primary,
),
),
const SizedBox(height: _logoTopPadding),
AnimatedContainer(
duration: _resizeDuration,
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/views/main_page/feed/feed.dart
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ class FeedScreenViewState extends State<FeedScreenView>
void openPinned(BuildContext context) {
GoRouter.of(context).go(
'${GoRouter.of(context).routeInformationProvider.value.uri.path}/'
'${pinnedPostsRoute.pageRoute}',
'${pinnedPostsRoute.pagePath}',
);
}

Expand Down
2 changes: 1 addition & 1 deletion lib/ui/views/main_page/feed/widgets/feed_post.dart
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ class _FeedPostState extends State<FeedPost> {
}
GoRouter.of(context).go(
'${GoRouter.of(context).routeInformationProvider.value.uri.path}/'
'${postCommentsRoute.pageRoute.replaceAll(':postId', post.blogData!.id.toString())}',
'${postCommentsRoute.pagePath.replaceAll(':postId', post.blogData!.id.toString())}',
);
}

Expand Down
12 changes: 7 additions & 5 deletions lib/ui/views/main_page/main_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ class MainPageState extends State<MainPage> {

bool isRootScreen(BuildContext context) {
final location = GoRouterState.of(context).uri.path;
return MainPageRouting.navbarRoutes.any((r) => r.pageRoute == location);
return MainPageRouting.navbarRoutes
.any((r) => mainPageRoute + r.pagePath == location);
}

@override
Expand All @@ -83,12 +84,13 @@ class MainPageState extends State<MainPage> {
onDestinationSelected: (value) {
Scaffold.of(context).closeDrawer();
final selectedBarIndex = widget.shell.currentIndex;
final currentPageRoute = MainPageRouting
.navbarRoutes[selectedBarIndex].pageRoute;
final currentPageRoute = mainPageRoute +
MainPageRouting
.navbarRoutes[selectedBarIndex].pagePath;
final destinationSubroute = model.routes
.where((r) => model.isOnline || !r.onlineOnly)
.elementAt(value)
.pageRoute;
.pagePath;
GoRouter.of(context).go(
'$currentPageRoute/$drawerRoutePrefix/$destinationSubroute',
);
Expand Down Expand Up @@ -127,6 +129,6 @@ class MainPageState extends State<MainPage> {

void goToRootScreen(BuildContext context, int currentRouteIndex) {
GoRouter.of(context)
.go(MainPageRouting.navbarRoutes[currentRouteIndex].pageRoute);
.go(MainPageRouting.navbarRoutes[currentRouteIndex].pagePath);
}
}
6 changes: 4 additions & 2 deletions lib/ui/views/main_page/main_page_navigation_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:unn_mobile/core/viewmodels/main_page/main_page_view_model.dart';
import 'package:unn_mobile/ui/router.dart';
import 'package:unn_mobile/ui/views/main_page/main_page_routing.dart';

class MainPageNavigationBar extends StatelessWidget {
Expand Down Expand Up @@ -42,8 +43,9 @@ class MainPageNavigationBar extends StatelessWidget {

static int getSelectedBarIndex(BuildContext context) {
final String location = GoRouterState.of(context).uri.path;
return MainPageRouting.navbarRoutes
.indexWhere((route) => location.startsWith(route.pageRoute));
return MainPageRouting.navbarRoutes.indexWhere(
(route) => location.startsWith(mainPageRoute + route.pagePath),
);
}

List<Widget> _getNavbarDestinations(
Expand Down
8 changes: 4 additions & 4 deletions lib/ui/views/main_page/main_page_routing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class MainPageRouteData {
final IconData selectedIcon;
final IconData unselectedIcon;
final String pageTitle;
final String pageRoute;
final String pagePath;
final Widget Function(BuildContext, GoRouterState) builder;
final bool isDisabled;
final List<Type> userTypes;
Expand All @@ -32,7 +32,7 @@ class MainPageRouteData {
this.selectedIcon,
this.unselectedIcon,
this.pageTitle,
this.pageRoute, {
this.pagePath, {
required this.userTypes,
required this.builder,
this.onlineOnly = false,
Expand All @@ -44,7 +44,7 @@ class MainPageRouteData {
IconData? selectedIcon,
IconData? unselectedIcon,
String? pageTitle,
String? pageRoute,
String? pagePath,
Widget Function(BuildContext, GoRouterState)? builder,
bool? isDisabled,
List<Type>? userTypes,
Expand All @@ -55,7 +55,7 @@ class MainPageRouteData {
selectedIcon ?? this.selectedIcon,
unselectedIcon ?? this.unselectedIcon,
pageTitle ?? this.pageTitle,
pageRoute ?? this.pageRoute,
pagePath ?? this.pagePath,
onlineOnly: onlineOnly ?? this.onlineOnly,
subroutes: subroutes ?? this.subroutes,
isDisabled: isDisabled ?? this.isDisabled,
Expand Down
Loading
Loading