This commit is contained in:
toly
2023-11-20 20:05:05 +08:00
parent 8de38299e2
commit 6e8d926693
61 changed files with 3107 additions and 65 deletions

View File

@@ -1,4 +1,5 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'views/navigator_scope.dart';
import 'iroute.dart';
@@ -7,13 +8,10 @@ import 'route_history_manager.dart';
import 'routes.dart';
import 'views/not_find_view.dart';
AppRouterDelegate router = AppRouterDelegate(
initial: IRouteConfig(
uri: Uri.parse('/app/color'),
),
node: appRoute);
AppRouterDelegate router = AppRouterDelegate(node: rootRoute);
class AppRouterDelegate extends RouterDelegate<IRouteConfig> with ChangeNotifier {
class AppRouterDelegate extends RouterDelegate<IRouteConfig>
with ChangeNotifier {
/// 核心数据,路由配置数据列表
final List<IRouteConfig> _configs = [];
@@ -25,18 +23,16 @@ class AppRouterDelegate extends RouterDelegate<IRouteConfig> with ChangeNotifier
final IRouteNode node;
@override
IRouteConfig get currentConfiguration => current;
IRouteConfig? get currentConfiguration {
if(_configs.isEmpty) return null;
return current;
}
AppRouterDelegate({
this.notFindPageBuilder,
required this.node,
required IRouteConfig initial,
}) {
_configs.add(initial);
_historyManager.recode(initial);
}
});
Page _defaultNotFindPageBuilder(_, __) => const MaterialPage(
child: Material(child: NotFindPage()),
@@ -84,6 +80,7 @@ class AppRouterDelegate extends RouterDelegate<IRouteConfig> with ChangeNotifier
}
notifyListeners();
if (config.forResult) {
return _completerMap[value]!.future;
}
@@ -174,5 +171,14 @@ class AppRouterDelegate extends RouterDelegate<IRouteConfig> with ChangeNotifier
}
@override
Future<void> setNewRoutePath(configuration) async {}
Future<void> setNewRoutePath(IRouteConfig configuration) async{
changeRoute(configuration);
}
@override
Future<void> setInitialRoutePath(IRouteConfig configuration) {
_configs.add(configuration);
_historyManager.recode(configuration);
return super.setInitialRoutePath(configuration);
}
}

View File

@@ -1,22 +1,19 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'iroute_config.dart';
class AppRouterParser extends RouteInformationParser<IRouteConfig>{
class AppRouterParser extends RouteInformationParser<IRouteConfig> {
@override
RouteInformation restoreRouteInformation(IRouteConfig configuration) {
return RouteInformation(
uri: configuration.uri
);
return RouteInformation(uri: configuration.uri);
}
@override
Future<IRouteConfig> parseRouteInformationWithDependencies(
RouteInformation routeInformation, BuildContext context) async{
return IRouteConfig(uri: routeInformation.uri);
RouteInformation routeInformation,
BuildContext context,
) {
return SynchronousFuture(IRouteConfig(uri: routeInformation.uri));
}
}
}

View File

@@ -55,8 +55,7 @@ abstract class IRouteNode {
if (node.children.isNotEmpty) {
target = prefix + target;
List<IRouteNode> nodes =
node.children.where((e) => e.path == target).toList();
List<IRouteNode> nodes = node.children.where((e) => e.path == target).toList();
bool match = nodes.isNotEmpty;
if (match) {
IRouteNode matched = nodes.first;

View File

@@ -37,7 +37,7 @@ class _AppNavigationRailState extends State<AppNavigationRail> {
tail: Padding(
padding: const EdgeInsets.only(bottom: 6.0),
child: Text(
'V0.0.9',
'V0.0.10',
style: TextStyle(color: Colors.white, fontSize: 12),
),
),
@@ -63,14 +63,14 @@ class _AppNavigationRailState extends State<AppNavigationRail> {
void _onDestinationSelected(int index) {
String path = deskNavBarMenus[index].path!;
if (index == 1) {
router.changePath(path, keepAlive: true);
router.changePath(path, keepAlive: true,recordHistory: true);
return;
}
if (index == 4) {
router.changePath(path, style: RouteStyle.push);
router.changePath(path, style: RouteStyle.push,recordHistory: true);
return;
} else {
router.changePath(path);
router.changePath(path,recordHistory: true);
}
}

View File

@@ -4,43 +4,40 @@ import 'navigation/router/app_router_delegate.dart';
import '../pages/sort/provider/state.dart';
import 'navigation/transition/fade_page_transitions_builder.dart';
class UnitApp extends StatelessWidget {
const UnitApp({super.key});
@override
Widget build(BuildContext context) {
return SortStateScope(
notifier: SortState(),
child: MaterialApp.router(
routerDelegate: router,
routeInformationParser: AppRouterParser(),
theme: ThemeData(
routerDelegate: router,
routeInformationParser: AppRouterParser(),
routeInformationProvider: PlatformRouteInformationProvider(
initialRouteInformation: RouteInformation(uri: Uri.parse('/app/color')),
),
theme: ThemeData(
fontFamily: "宋体",
scaffoldBackgroundColor: Colors.white,
pageTransitionsTheme: const PageTransitionsTheme(
builders: {
TargetPlatform.android: ZoomPageTransitionsBuilder(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
TargetPlatform.macOS: FadePageTransitionsBuilder(),
TargetPlatform.windows: FadePageTransitionsBuilder(),
TargetPlatform.linux: FadePageTransitionsBuilder(),
}
),
appBarTheme: const AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(
color: Colors.black,
fontSize: 18,
fontWeight: FontWeight.bold,
))),
debugShowCheckedModeBanner: false,
// home: AppNavigation()
scaffoldBackgroundColor: Colors.white,
pageTransitionsTheme: const PageTransitionsTheme(builders: {
TargetPlatform.android: ZoomPageTransitionsBuilder(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
TargetPlatform.macOS: FadePageTransitionsBuilder(),
TargetPlatform.windows: FadePageTransitionsBuilder(),
TargetPlatform.linux: FadePageTransitionsBuilder(),
}),
appBarTheme: const AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(
color: Colors.black,
fontSize: 18,
fontWeight: FontWeight.bold,
))),
debugShowCheckedModeBanner: false,
// home: AppNavigation()
),
);
}
}