v10
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user