11import 'package:flutter/material.dart' ;
22import 'package:go_router/go_router.dart' ;
3- import 'package:toly_menu/toly_menu.dart' ;
4- import 'package:toly_menu_manager/toly_menu_manager.dart' ;
3+ import 'package:tolyui/tolyui.dart' ;
54
65import '../../bloc/display_logic.dart' ;
6+ import '../../ext/go_router/listener.dart' ;
7+ import '../menu/menu_repository_impl.dart' ;
78
8- class AppMenuTree extends StatelessWidget {
9- final MenuState state;
9+ class AppMenuTree extends StatefulWidget {
1010
11- const AppMenuTree ({super .key, required this .state});
11+ const AppMenuTree ({super .key});
12+
13+ @override
14+ State <AppMenuTree > createState () => _AppMenuTreeState ();
15+ }
16+
17+ class _AppMenuTreeState extends State <AppMenuTree > with RouterChangeListenerMixin {
18+
19+ late MenuTreeMeta _menuMeta;
20+
21+
22+ @override
23+ void initState () {
24+ super .initState ();
25+ _initTreeMeta ();
26+ }
27+
28+ void _initTreeMeta () {
29+ MenuNode root = MenuNode .fromMap (layoutMenus);
30+ List <String > parts = Uri .parse (path).pathSegments;
31+ String parentPath = parts.sublist (0 ,parts.length- 1 ).join ('/' );
32+ _menuMeta = MenuTreeMeta (
33+ expandMenus: ['/$parentPath ' ],
34+ activeMenu: root.find (path),
35+ root: root,
36+ );
37+ }
1238
1339 @override
1440 Widget build (BuildContext context) {
15- return MenuRouterChangeListener (
16- onRouterChanged: _onMenuRouterChange,
17- child: TolyMenu (
18- activeColor: Color (0xffe6edf3 ),
19- backgroundColor: Colors .white,
20- expandBackgroundColor: Colors .white,
21- labelTextStyle: TextStyle (color: Color (0xff2d3a53 )),
22- state: state,
23- onSelect: (v) => _onSelect (context, v),
24- ));
41+ Color expandBackgroundColor = context.isDark? Colors .black: Colors .transparent;
42+ Color backgroundColor = context.isDark? Color (0xff001529 ): Colors .white;
43+
44+ return TolyRailMenuTree (
45+ leading: SizedBox (height: 18 ,),
46+ enableWidthChange: true ,
47+ maxWidth: 360 ,
48+ width: 240 ,
49+ meta: _menuMeta,
50+ backgroundColor: backgroundColor,
51+ expandBackgroundColor: expandBackgroundColor,
52+ onSelect: _onSelect,
53+ );
2554 }
2655
2756 void _onMenuRouterChange (BuildContext context, String ? path) {
@@ -31,8 +60,27 @@ class AppMenuTree extends StatelessWidget {
3160 }
3261 }
3362
34- void _onSelect (BuildContext context, MenuNode menu) {
35- print (menu.path);
36- context.selectMenu (menu);
63+ void _onSelect (MenuNode menu) {
64+ if (menu.isLeaf){
65+ context.go (menu.id);
66+ print (path);
67+ }else {
68+ _menuMeta = _menuMeta.select (menu, singleExpand: true );
69+ setState (() {});
70+ }
71+ }
72+
73+ @override
74+ void reassemble () {
75+ MenuNode root = MenuNode .fromMap (layoutMenus);
76+ _menuMeta = _menuMeta.copyWith (root: root);
77+ super .reassemble ();
78+ }
79+
80+ @override
81+ void onChangeRoute (String path) {
82+ _menuMeta = _menuMeta.selectPath (path, singleExpand: true );
83+ DisplayScope .of (context).active (path);
84+ setState (() {});
3785 }
3886}
0 commit comments