Refactor routing methods to Navi helper class

This commit is contained in:
Mike Schwörer 2024-06-13 15:42:39 +02:00
parent 431d91a380
commit beb1005710
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
8 changed files with 28 additions and 11 deletions

View File

@ -3,6 +3,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';
import 'package:simplecloudnotifier/pages/debug/debug_main.dart';
import 'package:simplecloudnotifier/state/app_theme.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
class SCNAppBar extends StatelessWidget implements PreferredSizeWidget {
const SCNAppBar({
@ -43,7 +44,7 @@ class SCNAppBar extends StatelessWidget implements PreferredSizeWidget {
icon: const Icon(FontAwesomeIcons.solidSpiderBlackWidow),
tooltip: 'Debug',
onPressed: () {
Navigator.push(context, MaterialPageRoute<DebugMainPage>(builder: (context) => DebugMainPage()));
Navi.push(context, () => DebugMainPage());
},
));
} else {

View File

@ -10,6 +10,7 @@ import 'package:simplecloudnotifier/pages/account/login.dart';
import 'package:simplecloudnotifier/state/application_log.dart';
import 'package:simplecloudnotifier/state/globals.dart';
import 'package:simplecloudnotifier/state/app_auth.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
import 'package:simplecloudnotifier/utils/toaster.dart';
import 'package:simplecloudnotifier/utils/ui.dart';
import 'package:uuid/uuid.dart';
@ -157,7 +158,7 @@ class _AccountRootPageState extends State<AccountRootPage> {
text: 'Use existing account',
onPressed: () {
if (loading) return;
Navigator.push(context, MaterialPageRoute<AccountLoginPage>(builder: (context) => AccountLoginPage()));
Navi.push(context, () => AccountLoginPage());
},
tonal: true,
big: true,

View File

@ -8,6 +8,7 @@ import 'package:simplecloudnotifier/state/application_log.dart';
import 'package:simplecloudnotifier/state/globals.dart';
import 'package:simplecloudnotifier/state/app_auth.dart';
import 'package:simplecloudnotifier/state/token_source.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
import 'package:simplecloudnotifier/utils/toaster.dart';
import 'package:simplecloudnotifier/utils/ui.dart';
@ -154,7 +155,7 @@ class _AccountLoginPageState extends State<AccountLoginPage> {
await acc.save();
Toaster.success("Login", "Successfully logged in");
Navigator.popUntil(context, (route) => route.isFirst);
Navi.popToRoot(context);
} catch (exc, trace) {
ApplicationLog.error('Failed to verify token: ' + exc.toString(), trace: trace);
Toaster.error("Error", 'Failed to verify token');

View File

@ -5,6 +5,7 @@ import 'package:simplecloudnotifier/pages/debug/debug_persistence_hive.dart';
import 'package:simplecloudnotifier/pages/debug/debug_persistence_sharedprefs.dart';
import 'package:simplecloudnotifier/state/application_log.dart';
import 'package:simplecloudnotifier/state/request_log.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
class DebugPersistencePage extends StatefulWidget {
@override
@ -33,7 +34,7 @@ class _DebugPersistencePageState extends State<DebugPersistencePage> {
padding: const EdgeInsets.all(8.0),
child: GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute<DebugSharedPrefPage>(builder: (context) => DebugSharedPrefPage(sharedPref: prefs!)));
Navi.push(context, () => DebugSharedPrefPage(sharedPref: prefs!));
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -51,7 +52,7 @@ class _DebugPersistencePageState extends State<DebugPersistencePage> {
padding: const EdgeInsets.all(8.0),
child: GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute<DebugHiveBoxPage>(builder: (context) => DebugHiveBoxPage(boxName: 'scn-requests', box: Hive.box<SCNRequest>('scn-requests'))));
Navi.push(context, () => DebugHiveBoxPage(boxName: 'scn-requests', box: Hive.box<SCNRequest>('scn-requests')));
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -69,7 +70,7 @@ class _DebugPersistencePageState extends State<DebugPersistencePage> {
padding: const EdgeInsets.all(8.0),
child: GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute<DebugHiveBoxPage>(builder: (context) => DebugHiveBoxPage(boxName: 'scn-requests', box: Hive.box<SCNLog>('scn-logs'))));
Navi.push(context, () => DebugHiveBoxPage(boxName: 'scn-requests', box: Hive.box<SCNLog>('scn-logs')));
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,

View File

@ -3,6 +3,7 @@ import 'package:hive_flutter/hive_flutter.dart';
import 'package:simplecloudnotifier/components/layout/scaffold.dart';
import 'package:simplecloudnotifier/pages/debug/debug_persistence_hiveentry.dart';
import 'package:simplecloudnotifier/state/interfaces.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
class DebugHiveBoxPage extends StatelessWidget {
final String boxName;
@ -21,7 +22,7 @@ class DebugHiveBoxPage extends StatelessWidget {
itemBuilder: (context, listIndex) {
return GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute<DebugHiveEntryPage>(builder: (context) => DebugHiveEntryPage(value: box.getAt(listIndex)!)));
Navi.push(context, () => DebugHiveEntryPage(value: box.getAt(listIndex)!));
},
child: ListTile(
title: Text(box.getAt(listIndex).toString(), style: TextStyle(fontWeight: FontWeight.bold)),

View File

@ -3,6 +3,7 @@ import 'package:hive_flutter/hive_flutter.dart';
import 'package:intl/intl.dart';
import 'package:simplecloudnotifier/pages/debug/debug_request_view.dart';
import 'package:simplecloudnotifier/state/request_log.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
class DebugRequestsPage extends StatefulWidget {
@override
@ -40,7 +41,7 @@ class _DebugRequestsPageState extends State<DebugRequestsPage> {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 2.0),
child: GestureDetector(
onTap: () => Navigator.push(context, MaterialPageRoute<DebugRequestViewPage>(builder: (context) => DebugRequestViewPage(request: req))),
onTap: () => Navi.push(context, () => DebugRequestViewPage(request: req)),
child: ListTile(
tileColor: Theme.of(context).colorScheme.errorContainer,
textColor: Theme.of(context).colorScheme.onErrorContainer,
@ -76,7 +77,7 @@ class _DebugRequestsPageState extends State<DebugRequestsPage> {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 2.0),
child: GestureDetector(
onTap: () => Navigator.push(context, MaterialPageRoute<DebugRequestViewPage>(builder: (context) => DebugRequestViewPage(request: req))),
onTap: () => Navi.push(context, () => DebugRequestViewPage(request: req)),
child: ListTile(
title: Row(
children: [

View File

@ -8,6 +8,7 @@ import 'package:simplecloudnotifier/pages/message_view/message_view.dart';
import 'package:simplecloudnotifier/state/application_log.dart';
import 'package:simplecloudnotifier/state/app_auth.dart';
import 'package:simplecloudnotifier/pages/message_list/message_list_item.dart';
import 'package:simplecloudnotifier/utils/navi.dart';
class MessageListPage extends StatefulWidget {
const MessageListPage({super.key});
@ -83,7 +84,7 @@ class _MessageListPageState extends State<MessageListPage> {
message: item,
allChannels: _channels ?? {},
onPressed: () {
Navigator.push(context, MaterialPageRoute<MessageViewPage>(builder: (context) => MessageViewPage(message: item)));
Navi.push(context, () => MessageViewPage(message: item));
},
),
),

View File

@ -1 +1,11 @@
class Navi {}
import 'package:flutter/material.dart';
class Navi {
static void push<T extends Widget>(BuildContext context, T Function() builder) {
Navigator.push(context, MaterialPageRoute<T>(builder: (context) => builder()));
}
static void popToRoot(BuildContext context) {
Navigator.popUntil(context, (route) => route.isFirst);
}
}