13-04
This commit is contained in:
114
lib/13/03/app/navigation/app_router_delegate.dart
Normal file
114
lib/13/03/app/navigation/app_router_delegate.dart
Normal file
@@ -0,0 +1,114 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../pages/color/color_page.dart';
|
||||
import '../../pages/empty/empty_page.dart';
|
||||
import '../../pages/settings/settings_page.dart';
|
||||
import '../../pages/counter/counter_page.dart';
|
||||
import '../../pages/user/user_page.dart';
|
||||
import '../../transition/fade_transition_page.dart';
|
||||
import '../../transition/no_transition_page.dart';
|
||||
|
||||
const List<String> kDestinationsPaths = [
|
||||
'/color',
|
||||
'/counter',
|
||||
'/user',
|
||||
'/settings',
|
||||
];
|
||||
|
||||
AppRouterDelegate router = AppRouterDelegate();
|
||||
|
||||
class AppRouterDelegate extends RouterDelegate<Object> with ChangeNotifier {
|
||||
String _path = '/color';
|
||||
|
||||
String get path => _path;
|
||||
|
||||
set path(String value) {
|
||||
if (_path == value) return;
|
||||
_path = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Navigator(
|
||||
onPopPage: _onPopPage,
|
||||
pages: _buildPageByPath(path),
|
||||
);
|
||||
}
|
||||
|
||||
List<Page> _buildPageByPath(String path) {
|
||||
Widget? child;
|
||||
if (path == kDestinationsPaths[0]) {
|
||||
child = const ColorPage();
|
||||
}
|
||||
if (path == kDestinationsPaths[1]) {
|
||||
child = const CounterPage();
|
||||
}
|
||||
if (path == kDestinationsPaths[2]) {
|
||||
child = const UserPage();
|
||||
}
|
||||
if (path == kDestinationsPaths[3]) {
|
||||
child = const SettingPage();
|
||||
}
|
||||
return [
|
||||
FadeTransitionPage(
|
||||
key: ValueKey(path),
|
||||
child: child ?? const EmptyPage(),
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> popRoute() async {
|
||||
print('=======popRoute=========');
|
||||
return true;
|
||||
}
|
||||
|
||||
bool _onPopPage(Route route, result) {
|
||||
return route.didPop(result);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setNewRoutePath(configuration) async {}
|
||||
}
|
||||
|
||||
// class AppRouterDelegate extends RouterDelegate<String> with ChangeNotifier, PopNavigatorRouterDelegateMixin {
|
||||
//
|
||||
// List<String> _value = ['/'];
|
||||
//
|
||||
//
|
||||
// List<String> get value => _value;
|
||||
//
|
||||
// set value(List<String> value){
|
||||
// _value = value;
|
||||
// notifyListeners();
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return Navigator(
|
||||
// onPopPage: _onPopPage,
|
||||
// pages: _value.map((e) => _pageMap[e]!).toList(),
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// final Map<String, Page> _pageMap = const {
|
||||
// '/': MaterialPage(child: HomePage()),
|
||||
// 'a': MaterialPage(child: PageA()),
|
||||
// 'b': MaterialPage(child: PageB()),
|
||||
// 'c': MaterialPage(child: PageC()),
|
||||
// };
|
||||
//
|
||||
// bool _onPopPage(Route route, result) {
|
||||
// _value = List.of(_value)..removeLast();
|
||||
// notifyListeners();
|
||||
// return route.didPop(result);
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// GlobalKey<NavigatorState>? navigatorKey = GlobalKey<NavigatorState>();
|
||||
//
|
||||
// @override
|
||||
// Future<void> setNewRoutePath(String configuration) async{
|
||||
// }
|
||||
// }
|
||||
53
lib/13/03/app/navigation/views/app_navigation_rail.dart
Normal file
53
lib/13/03/app/navigation/views/app_navigation_rail.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../app_router_delegate.dart';
|
||||
|
||||
class AppNavigationRail extends StatefulWidget {
|
||||
const AppNavigationRail({super.key});
|
||||
|
||||
@override
|
||||
State<AppNavigationRail> createState() => _AppNavigationRailState();
|
||||
}
|
||||
|
||||
class _AppNavigationRailState extends State<AppNavigationRail> {
|
||||
final List<NavigationRailDestination> destinations = const [
|
||||
NavigationRailDestination(icon: Icon(Icons.color_lens_outlined), label: Text("颜色板")),
|
||||
NavigationRailDestination(icon: Icon(Icons.add_chart), label: Text("计数器")),
|
||||
NavigationRailDestination(icon: Icon(Icons.person), label: Text("我的")),
|
||||
NavigationRailDestination(icon: Icon(Icons.settings), label: Text("设置")),
|
||||
];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
router.addListener(_onRouterChange);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
router.removeListener(_onRouterChange);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
int _index = 0 ;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return NavigationRail(
|
||||
labelType: NavigationRailLabelType.all,
|
||||
onDestinationSelected: _onDestinationSelected,
|
||||
destinations: destinations,
|
||||
selectedIndex: _index,
|
||||
);
|
||||
}
|
||||
|
||||
void _onDestinationSelected(int index) {
|
||||
router.path = kDestinationsPaths[index];
|
||||
}
|
||||
|
||||
void _onRouterChange() {
|
||||
_index = kDestinationsPaths.indexOf(router.path);
|
||||
setState(() {
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
38
lib/13/03/app/unit_app.dart
Normal file
38
lib/13/03/app/unit_app.dart
Normal file
@@ -0,0 +1,38 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'navigation/app_router_delegate.dart';
|
||||
import 'navigation/views/app_navigation_rail.dart';
|
||||
|
||||
class UnitApp extends StatelessWidget {
|
||||
const UnitApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return MaterialApp(
|
||||
theme: ThemeData(
|
||||
appBarTheme: const AppBarTheme(
|
||||
elevation: 0,
|
||||
iconTheme: IconThemeData(color: Colors.black),
|
||||
titleTextStyle: TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
))),
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: Scaffold(
|
||||
body: Row(
|
||||
children: [
|
||||
const AppNavigationRail(),
|
||||
Expanded(
|
||||
child: Router(
|
||||
routerDelegate: router,
|
||||
backButtonDispatcher: RootBackButtonDispatcher(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'pages/app/app.dart';
|
||||
import 'app/unit_app.dart';
|
||||
import 'app/navigation/app_router_delegate.dart';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void main() {
|
||||
runApp(const App());
|
||||
runApp(const UnitApp());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
import 'package:toly_menu/toly_menu.dart';
|
||||
|
||||
List<MenuData> menus = [
|
||||
MenuData(path: '/dashboard', label: '总览面板', children: [
|
||||
MenuData(path: '/dashboard/data_analyse', label: '数据分析', deep: 1),
|
||||
MenuData(path: '/dashboard/work_board', label: '工作台', deep: 1, children: [
|
||||
MenuData(path: '/dashboard/work_board/a', label: '第一工作区', deep: 2),
|
||||
MenuData(path: '/dashboard/work_board/b', label: '第二工作区', deep: 2),
|
||||
MenuData(path: '/dashboard/work_board/c', label: '第三工作区', deep: 2),
|
||||
]),
|
||||
]),
|
||||
MenuData(path: '/manager', label: '系统管理', children: [
|
||||
MenuData(path: '/manager/account', label: '账号管理', deep: 1),
|
||||
MenuData(path: '/manager/role', label: '角色管理', deep: 1),
|
||||
MenuData(path: '/manager/menu', label: '菜单管理', deep: 1),
|
||||
]),
|
||||
MenuData(path: '/knowledge', label: '知识库管理', children: [
|
||||
MenuData(path: '/knowledge/a', label: '语文知识', deep: 1, children: [
|
||||
MenuData(
|
||||
path: '/knowledge/a/1',
|
||||
label: '诗词歌赋',
|
||||
deep: 2,
|
||||
),
|
||||
MenuData(
|
||||
path: '/knowledge/a/2',
|
||||
label: '人物故事',
|
||||
deep: 2,
|
||||
),
|
||||
MenuData(
|
||||
path: '/knowledge/a/3',
|
||||
label: '名著推荐',
|
||||
deep: 2,
|
||||
)
|
||||
]),
|
||||
MenuData(
|
||||
path: '/knowledge/b',
|
||||
label: '数学知识',
|
||||
children: [
|
||||
MenuData(
|
||||
path: '/knowledge/b/1',
|
||||
label: '人物故事',
|
||||
deep: 2,
|
||||
),
|
||||
MenuData(
|
||||
path: '/knowledge/b/2',
|
||||
label: '数学定理',
|
||||
deep: 2,
|
||||
),
|
||||
MenuData(
|
||||
path: '/knowledge/b/3',
|
||||
label: '几何知识',
|
||||
deep: 2,
|
||||
),
|
||||
MenuData(
|
||||
path: '/knowledge/b/4',
|
||||
label: '代数知识',
|
||||
deep: 2,
|
||||
)
|
||||
],
|
||||
deep: 1),
|
||||
MenuData(
|
||||
path: '/knowledge/c',
|
||||
label: '英语知识',
|
||||
deep: 1,
|
||||
),
|
||||
]),
|
||||
MenuData(path: '/widgets', label: '组件集录', children: [
|
||||
MenuData(path: '/widgets/stateless', label: '无状态组件', deep: 1),
|
||||
MenuData(path: '/widgets/stateful', label: '有状态组件', deep: 1),
|
||||
MenuData(path: '/widgets/single_child', label: '单子渲染组件', deep: 1),
|
||||
MenuData(path: '/widgets/mutli_child', label: '多子渲染组件', deep: 1),
|
||||
MenuData(path: '/widgets/sliver', label: '滑片组件', deep: 1),
|
||||
MenuData(path: '/widgets/proxy', label: '代理组件', deep: 1),
|
||||
MenuData(path: '/widgets/other', label: '其他组件', deep: 1),
|
||||
])
|
||||
];
|
||||
@@ -1,89 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:toly_menu/toly_menu.dart';
|
||||
|
||||
import '../../menus.dart';
|
||||
|
||||
class App extends StatelessWidget {
|
||||
const App({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
theme: ThemeData(
|
||||
appBarTheme: const AppBarTheme(
|
||||
elevation: 0,
|
||||
iconTheme: IconThemeData(color: Colors.black),
|
||||
titleTextStyle: TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
))),
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: AppLayout());
|
||||
}
|
||||
}
|
||||
|
||||
class AppLayout extends StatelessWidget {
|
||||
const AppLayout({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 210,
|
||||
child: MenuPanel(),
|
||||
),
|
||||
// Container()
|
||||
],
|
||||
),
|
||||
// appBar: AppToolBar(),
|
||||
// body: AppNavigation(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MenuPanel extends StatefulWidget {
|
||||
const MenuPanel({super.key});
|
||||
|
||||
@override
|
||||
State<MenuPanel> createState() => _MenuPanelState();
|
||||
}
|
||||
|
||||
class _MenuPanelState extends State<MenuPanel> {
|
||||
MenuState state = MenuState(expandMenus: ['/dashboard'], activeMenu: '/dashboard/data_analyse', items: menus);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return TolyMenu(state: state, onSelect: _onSelect);
|
||||
}
|
||||
|
||||
void _onSelect(MenuData menu) {
|
||||
if(menu.isLeaf){
|
||||
state = state.copyWith(activeMenu: menu.path);
|
||||
}else{
|
||||
List<String> menus = [];
|
||||
String path = menu.path.substring(1);
|
||||
List<String> parts = path.split('/');
|
||||
|
||||
if(parts.isNotEmpty){
|
||||
String path = '';
|
||||
for (String part in parts) {
|
||||
path+='/$part';
|
||||
menus.add(path);
|
||||
}
|
||||
}
|
||||
|
||||
if(state.expandMenus.contains(menu.path)){
|
||||
menus.remove(menu.path);
|
||||
}
|
||||
|
||||
state = state.copyWith(expandMenus: menus);
|
||||
|
||||
}
|
||||
setState(() {
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class RootContent extends StatelessWidget {
|
||||
const RootContent({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Router(routerDelegate: RootContentDelegate());
|
||||
}
|
||||
}
|
||||
|
||||
class RootContentDelegate extends RouterDelegate with ChangeNotifier,PopNavigatorRouterDelegateMixin{
|
||||
|
||||
|
||||
@override
|
||||
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Navigator(
|
||||
key: navigatorKey,
|
||||
pages: [
|
||||
|
||||
],
|
||||
onPopPage: (route, result) {
|
||||
// appState.selectedBook = null;
|
||||
// notifyListeners();
|
||||
return route.didPop(result);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Future<void> setNewRoutePath(configuration) {
|
||||
// TODO: implement setNewRoutePath
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
52
lib/13/03/pages/color/color_page.dart
Normal file
52
lib/13/03/pages/color/color_page.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:iroute/common/components/colors_panel.dart';
|
||||
import 'package:iroute/common/pages/stl_color_page.dart';
|
||||
|
||||
// class HomePage extends StatelessWidget {
|
||||
// const HomePage({super.key});
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return Scaffold(
|
||||
// body: const Center(child: Text('HomePage')));
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
class ColorPage extends StatefulWidget {
|
||||
const ColorPage({super.key});
|
||||
|
||||
@override
|
||||
State<ColorPage> createState() => _ColorPageState();
|
||||
}
|
||||
|
||||
class _ColorPageState extends State<ColorPage> {
|
||||
final List<Color> _colors = [
|
||||
Colors.red, Colors.black, Colors.blue, Colors.green, Colors.orange,
|
||||
Colors.pink, Colors.purple, Colors.indigo, Colors.amber, Colors.cyan,
|
||||
Colors.redAccent, Colors.grey, Colors.blueAccent, Colors.greenAccent, Colors.orangeAccent,
|
||||
Colors.pinkAccent, Colors.purpleAccent, Colors.indigoAccent, Colors.amberAccent, Colors.cyanAccent,
|
||||
];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
// appBar: AppBar(title:const Text('颜色主页')),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: _toAddPage,
|
||||
child: const Icon(Icons.add),
|
||||
),
|
||||
body: ColorsPanel(
|
||||
colors: _colors,
|
||||
onSelect: _selectColor,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _selectColor(Color color){
|
||||
// String value = color.value.toRadixString(16);
|
||||
}
|
||||
|
||||
void _toAddPage() async {
|
||||
}
|
||||
}
|
||||
43
lib/13/03/pages/counter/counter_page.dart
Normal file
43
lib/13/03/pages/counter/counter_page.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CounterPage extends StatefulWidget {
|
||||
const CounterPage({super.key});
|
||||
|
||||
@override
|
||||
State<CounterPage> createState() => _CounterPageState();
|
||||
}
|
||||
|
||||
class _CounterPageState extends State<CounterPage> {
|
||||
int _counter = 0;
|
||||
|
||||
void _incrementCounter() {
|
||||
setState(() {
|
||||
_counter++;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
const Text(
|
||||
'You have pushed the button this many times:',
|
||||
),
|
||||
Text(
|
||||
'$_counter',
|
||||
style: Theme.of(context).textTheme.headlineMedium,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: _incrementCounter,
|
||||
tooltip: 'Increment',
|
||||
child: const Icon(Icons.add),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
30
lib/13/03/pages/empty/empty_page.dart
Normal file
30
lib/13/03/pages/empty/empty_page.dart
Normal file
@@ -0,0 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class EmptyPage extends StatelessWidget {
|
||||
const EmptyPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('界面走丢了'),
|
||||
),
|
||||
body: Scaffold(
|
||||
body: Center(
|
||||
child: Wrap(
|
||||
spacing: 16,
|
||||
crossAxisAlignment: WrapCrossAlignment.center,
|
||||
direction: Axis.vertical,
|
||||
children: [
|
||||
Icon(Icons.nearby_error,size: 64, color: Colors.grey),
|
||||
Text(
|
||||
'404 界面丢失',
|
||||
style: TextStyle(fontSize: 24, color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
11
lib/13/03/pages/settings/settings_page.dart
Normal file
11
lib/13/03/pages/settings/settings_page.dart
Normal file
@@ -0,0 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class SettingPage extends StatelessWidget {
|
||||
const SettingPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body:Center(child: Text('SettingPage')));
|
||||
}
|
||||
}
|
||||
11
lib/13/03/pages/user/user_page.dart
Normal file
11
lib/13/03/pages/user/user_page.dart
Normal file
@@ -0,0 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class UserPage extends StatelessWidget {
|
||||
const UserPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body:Center(child: Text('UserPage')));
|
||||
}
|
||||
}
|
||||
53
lib/13/03/transition/fade_transition_page.dart
Normal file
53
lib/13/03/transition/fade_transition_page.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
// Copyright 2021, the Flutter project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class FadeTransitionPage<T> extends Page<T> {
|
||||
final Widget child;
|
||||
final Duration duration;
|
||||
|
||||
const FadeTransitionPage({
|
||||
super.key,
|
||||
required this.child,
|
||||
this.duration = const Duration(milliseconds: 300),
|
||||
});
|
||||
|
||||
@override
|
||||
Route<T> createRoute(BuildContext context) =>
|
||||
PageBasedFadeTransitionRoute<T>(this);
|
||||
}
|
||||
|
||||
class PageBasedFadeTransitionRoute<T> extends PageRoute<T> {
|
||||
final FadeTransitionPage<T> _page;
|
||||
|
||||
PageBasedFadeTransitionRoute(this._page) : super(settings: _page);
|
||||
|
||||
@override
|
||||
Color? get barrierColor => null;
|
||||
|
||||
@override
|
||||
String? get barrierLabel => null;
|
||||
|
||||
@override
|
||||
Duration get transitionDuration => _page.duration;
|
||||
|
||||
@override
|
||||
bool get maintainState => true;
|
||||
|
||||
@override
|
||||
Widget buildPage(BuildContext context, Animation<double> animation,
|
||||
Animation<double> secondaryAnimation) {
|
||||
var curveTween = CurveTween(curve: Curves.easeIn);
|
||||
return FadeTransition(
|
||||
opacity: animation.drive(curveTween),
|
||||
child: (settings as FadeTransitionPage).child,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildTransitions(BuildContext context, Animation<double> animation,
|
||||
Animation<double> secondaryAnimation, Widget child) =>
|
||||
child;
|
||||
}
|
||||
47
lib/13/03/transition/no_transition_page.dart
Normal file
47
lib/13/03/transition/no_transition_page.dart
Normal file
@@ -0,0 +1,47 @@
|
||||
// Copyright 2021, the Flutter project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class NoTransitionPage<T> extends Page<T> {
|
||||
final Widget child;
|
||||
|
||||
const NoTransitionPage({
|
||||
super.key,
|
||||
required this.child,
|
||||
});
|
||||
|
||||
@override
|
||||
Route<T> createRoute(BuildContext context) => NoTransitionRoute<T>(this);
|
||||
}
|
||||
|
||||
class NoTransitionRoute<T> extends PageRoute<T> {
|
||||
|
||||
final NoTransitionPage<T> _page;
|
||||
|
||||
NoTransitionRoute(this._page) : super(settings: _page);
|
||||
|
||||
@override
|
||||
Color? get barrierColor => null;
|
||||
|
||||
@override
|
||||
String? get barrierLabel => null;
|
||||
|
||||
@override
|
||||
Duration get transitionDuration => const Duration(milliseconds: 0);
|
||||
|
||||
@override
|
||||
bool get maintainState => true;
|
||||
|
||||
@override
|
||||
Widget buildPage(BuildContext context, Animation<double> animation,
|
||||
Animation<double> secondaryAnimation) {
|
||||
return (settings as NoTransitionPage).child;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildTransitions(BuildContext context, Animation<double> animation,
|
||||
Animation<double> secondaryAnimation, Widget child) =>
|
||||
child;
|
||||
}
|
||||
Reference in New Issue
Block a user