Skip to content

Commit 349724f

Browse files
committed
基于tolyui改造布局集录
1 parent a4fcff2 commit 349724f

File tree

12 files changed

+168
-126
lines changed

12 files changed

+168
-126
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright 2014 The 张风捷特烈 . All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// Author: 张风捷特烈
6+
// CreateTime: 2024-05-25
7+
// Contact Me: [email protected]
8+
9+
import 'package:flutter/material.dart';
10+
import 'package:go_router/go_router.dart';
11+
12+
mixin RouterChangeListenerMixin<T extends StatefulWidget> on State<T> {
13+
late GoRouterDelegate _delegate;
14+
15+
String get path => '/${_delegate.currentConfiguration.matches.last.matchedLocation}';
16+
17+
@override
18+
void initState() {
19+
super.initState();
20+
_delegate = GoRouter.of(context).routerDelegate;
21+
_delegate.addListener(_onChange);
22+
}
23+
24+
@override
25+
void dispose() {
26+
_delegate.removeListener(_onChange);
27+
super.dispose();
28+
}
29+
30+
void _onChange() {
31+
RouteMatchBase match = _delegate.currentConfiguration.matches.last;
32+
onChangeRoute("/${match.matchedLocation}");
33+
}
34+
35+
void onChangeRoute(String path);
36+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright 2014 The 张风捷特烈 . All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// Author: 张风捷特烈
6+
// CreateTime: 2024-05-25
7+
// Contact Me: [email protected]
8+
9+
import 'package:go_router/go_router.dart';
10+
11+
extension GoRouterPath on GoRouter{
12+
String get path => '/${routerDelegate.currentConfiguration.matches.last.matchedLocation}';
13+
}
14+
Lines changed: 11 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,18 @@
1-
import 'dart:async';
2-
3-
import 'package:layout/src/navigation/menu/popable.dart';
4-
import 'package:toly_menu/toly_menu.dart';
5-
import 'package:toly_menu_manager/toly_menu_manager.dart';
61

72
import 'base_layout.dart';
83
import 'scroll.dart';
94
import 'layout.dart';
105
import 'flex.dart';
116

12-
class MenuRepositoryImpl implements MenuRepository {
13-
14-
@override
15-
FutureOr<MenuNode> loadRootMenu() {
16-
print("========loadRootMenu==========");
17-
return MenuNode.fromMap({
18-
'children': [
19-
home,
20-
baseMenus,
21-
drawMenus,
22-
calcMenus,
23-
// popableMenus,
24-
]
25-
});
26-
}
27-
28-
@override
29-
FutureOr<(List<String>, String)> loadMenuActiveState() {
30-
return (['/base'],'/base/size');
31-
}
32-
33-
@override
34-
FutureOr<List<MenuHistory>> loadMenuHistory() {
35-
36-
return [];
37-
}
38-
39-
@override
40-
FutureOr<void> saveMenuHistory(MenuHistory history) {
41-
42-
}
43-
44-
@override
45-
FutureOr<void> deleteMenuHistory(MenuHistory history) {
46-
47-
}
7+
Map<String, dynamic> get layoutMenus => {
8+
'path': '',
9+
'label': '',
10+
'children': [
11+
home,
12+
baseMenus,
13+
drawMenus,
14+
calcMenus,
15+
// popableMenus,
16+
]
4817
}
18+
;

packages/layout/lib/src/navigation/router/desk_router.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:go_router/go_router.dart';
3-
import 'package:toly_menu_manager/view/menu_router_scope.dart';
43

54
import '../../../layout.dart';
6-
import '../../views/base/size/size_loss_by_align.dart';
75
import '../../views/base/size/size_tight_constraint.dart';
86
import '../../views/base/size/size_display.dart';
97
import '../../views/test_show.dart';
@@ -13,10 +11,7 @@ import '../view/app_desk_navigation.dart';
1311

1412
RouteBase get deskNavRoute => ShellRoute(
1513
builder: (BuildContext context, GoRouterState state, Widget child) {
16-
return MenuRouterScope(
17-
repository: MenuRepositoryImpl(),
18-
child: AppDeskNavigation(content: child),
19-
);
14+
return AppDeskNavigation(content: child);
2015
},
2116
routes: [
2217
GoRoute(

packages/layout/lib/src/navigation/view/app_desk_navigation.dart

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import 'package:flutter/cupertino.dart';
22
import 'package:flutter/material.dart';
33
import 'package:go_router/go_router.dart';
44

5-
import 'package:toly_menu_manager/bloc/state.dart';
6-
import 'package:toly_menu_manager/toly_menu_manager.dart';
75

86
import '../../views/playground/layout_playground.dart';
97
import 'app_menu_tree.dart';
@@ -20,34 +18,12 @@ class AppDeskNavigation extends StatelessWidget {
2018
children: [
2119
DeskNavigationRail(),
2220
Expanded(child: LayoutPlayGround(
23-
content : Column(
24-
children: [
25-
MenuHistoryChangeListener(onRouterChanged: _onActiveChanged,
26-
child: MenuRecordTab(onCloseHistory: _onCloseHistory, onTapHistory: _onTapHistory)),
27-
Expanded(child: content),
28-
],
29-
),
21+
content : content,
3022
)),
3123
],
3224
),
3325
);
3426
}
35-
36-
void _onCloseHistory(BuildContext context,MenuHistory history) {
37-
context.removeHistory(history);
38-
}
39-
40-
void _onTapHistory(BuildContext context,String path) {
41-
print("======_onTapHistory:$path=================");
42-
context.activeHistory(path);
43-
44-
}
45-
46-
void _onActiveChanged(BuildContext context,String? value) {
47-
if(value!=null){
48-
context.go(value);
49-
}
50-
}
5127
}
5228

5329
class DeskNavigationRail extends StatefulWidget {
@@ -74,14 +50,7 @@ class _DeskNavigationRailState extends State<DeskNavigationRail> {
7450
child: Stack(
7551
alignment: Alignment.centerRight,
7652
children: [
77-
MenuLoadTaskBuilder(
78-
builder: (_, task) =>
79-
switch (task) {
80-
MenuLoading() => const Center(child: CupertinoActivityIndicator()),
81-
MenuLoadSuccess() => AppMenuTree(state: task.state,),
82-
MenuLoadFailed() => Text('${task.error.toString()}'),
83-
},
84-
),
53+
AppMenuTree(),
8554
DragChangeWidth(
8655
onDragChanged: handleWidthChange,
8756
)
Lines changed: 66 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,56 @@
11
import 'package:flutter/material.dart';
22
import '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

65
import '../../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
}

packages/layout/lib/src/views/layout_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
33
import 'package:flutter/widgets.dart';
44
import 'package:go_router/go_router.dart';
55
import 'package:layout/src/navigation/router/app_router.dart';
6-
import 'package:toly_menu_manager/toly_menu_manager.dart';
76

87
import '../bloc/display_logic.dart';
98
import '../bloc/display_state.dart';

packages/layout/lib/src/views/playground/playground_bottom_bar.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import 'package:flutter/material.dart';
22
import 'package:layout/src/bloc/display_logic.dart';
3-
import 'package:toly_menu/toly_menu.dart';
4-
import 'package:toly_menu_manager/toly_menu_manager.dart';
53

64
import '../../data/model/display_frame.dart';
75

packages/layout/lib/src/views/playground/playground_top_bar.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import 'package:flutter/material.dart';
2-
import 'package:toly_menu/toly_menu.dart';
3-
import 'package:toly_menu_manager/toly_menu_manager.dart';
42

53
import '../../bloc/display_logic.dart';
64
import '../../bloc/display_state.dart';

packages/layout/pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ dependencies:
1212
sdk: flutter
1313

1414
# 菜单管理
15-
toly_menu: ^0.0.5
16-
toly_menu_manager: ^0.0.1
15+
tolyui: ^0.0.2
1716

1817
# 路由管理
1918
go_router: ^13.2.2

0 commit comments

Comments
 (0)