张延森 3 年之前
父節點
當前提交
711c56f944

+ 18
- 12
lib/pages/machinery/detail/index.dart 查看文件

@@ -1,27 +1,33 @@
1 1
 
2
+import 'package:farmer_client/widgets/layout/BasicPage.dart';
2 3
 import 'package:flutter/material.dart';
3 4
 import 'package:get/get.dart';
4 5
 import 'widgets/detail.dart';
5 6
 
6
-class MachineryDetailPage extends StatelessWidget {
7
-
8
-  final title = Rx<String>('查看详情');
9
-
7
+class MachineryDetailPage extends BasicPage {
10 8
   // 响应预约事件
11 9
   void handleClick() {
10
+    Get.back();
11
+  }
12 12
 
13
+  @override
14
+  void beforeShow() {
15
+    // TODO: implement onMounted
16
+    super.beforeShow();
17
+    print("----show----detail page--------------");
13 18
   }
14 19
 
15 20
   @override
16
-  Widget build(BuildContext context) {
17
-    final appBar = AppBar(title: Obx(() => Text(title.value)), centerTitle: true,);
21
+  void beforeHide() {
22
+    // TODO: implement beforeHide
23
+    super.beforeHide();
24
+    print("-----hide---detail page--------------");
25
+  }
18 26
 
19
-    return Scaffold(
20
-      appBar: appBar,
21
-      body: SingleChildScrollView(
22
-        child: page(context: context, handleClick: handleClick),
23
-      ),
24
-    );
27
+  @override
28
+  Widget builder(BuildContext context) {
29
+    naviTitle = "查看详情";
30
+    return page(context: context, handleClick: handleClick);
25 31
   }
26 32
 
27 33
 }

+ 19
- 14
lib/pages/machinery/map/index.dart 查看文件

@@ -1,29 +1,34 @@
1 1
 
2 2
 import 'package:farmer_client/pages/machinery/map/widgets/detail.dart';
3
+import 'package:farmer_client/widgets/layout/BasicPage.dart';
3 4
 import 'package:flutter/material.dart';
4 5
 import 'package:get/get.dart';
5 6
 
6
-class MachineryMapPage extends StatelessWidget {
7
-
8
-  final title = Rx<String>('查看地图');
9
-  // final detail = Rxn<T>(); // 农机信息
7
+class MachineryMapPage extends BasicPage {
10 8
 
11 9
   // 响应预约事件
12 10
   void handleClick() {
11
+    Get.toNamed("/machineryDetail");
12
+  }
13
+
14
+  @override
15
+  void beforeShow() {
16
+    // TODO: implement onMounted
17
+    super.beforeShow();
18
+    print("----show----map page--------------");
19
+  }
13 20
 
21
+  @override
22
+  void beforeHide() {
23
+    // TODO: implement beforeHide
24
+    super.beforeHide();
25
+    print("-----hide---map page--------------");
14 26
   }
15 27
 
16 28
   @override
17
-  Widget build(BuildContext context) {
18
-    final appBar = AppBar(title: Obx(() => Text(title.value)), centerTitle: true,);
19
-    return Scaffold(
20
-      appBar: appBar,
21
-      body: SafeArea(
22
-        child: SingleChildScrollView (
23
-          child: page(context: context, handleClick: handleClick),
24
-        ),
25
-      )
26
-    );
29
+  Widget builder(BuildContext context) {
30
+    naviTitle = "查看地图";
31
+    return page(context: context, handleClick: handleClick);
27 32
   }
28 33
   
29 34
 }

+ 5
- 5
lib/routes/middleWares.dart 查看文件

@@ -9,9 +9,9 @@ void routingCallback (routing) {
9 9
   bool isSplashScreen = routing?.current == '/splash';
10 10
   bool isLoginPage = routing?.current == '/login';
11 11
   bool isAgreementPage = routing?.current == '/agreement';
12
-  if (!isLogin && !isSplashScreen && !isLoginPage&&!isAgreementPage) {
13
-    // addPostFrameCallback 作用是等当前帧绘制完成之后再加载
14
-    // https://github.com/jonataslaw/getx/issues/262
15
-    SchedulerBinding.instance?.addPostFrameCallback((_) => Get.offNamed('/login'));
16
-  }
12
+  // if (!isLogin && !isSplashScreen && !isLoginPage&&!isAgreementPage) {
13
+  //   // addPostFrameCallback 作用是等当前帧绘制完成之后再加载
14
+  //   // https://github.com/jonataslaw/getx/issues/262
15
+  //   SchedulerBinding.instance?.addPostFrameCallback((_) => Get.offNamed('/login'));
16
+  // }
17 17
 }

+ 1
- 1
lib/routes/pages.dart 查看文件

@@ -14,7 +14,7 @@ import '../pages/index.dart';
14 14
 List<GetPage> pages = [
15 15
   GetPage(name: '/', page: () =>  Home()),
16 16
   GetPage(name: '/ArticleInfo', page: () =>  ArticleInfo()),//资讯详情
17
-  GetPage(name: '/splash', page: () => SplashScreen()),//SplashScreen
17
+  GetPage(name: '/splash', page: () => MachineryMapPage()),//SplashScreen
18 18
   GetPage(name: '/login', page: () =>  MyRouteLogin()),
19 19
   GetPage(name: '/addressList', page: () =>  AddressList()),
20 20
   GetPage(name: '/addAddress', page: () =>  AddAddress()),

+ 10
- 2
lib/theme.dart 查看文件

@@ -1,12 +1,20 @@
1 1
 
2 2
 import 'package:flutter/material.dart';
3
+import 'package:flutter_screenutil/flutter_screenutil.dart';
3 4
 
4 5
 ThemeData getTheme() {
5 6
   return ThemeData(
6
-    appBarTheme: const AppBarTheme(
7
+    appBarTheme: AppBarTheme(
8
+      centerTitle: true,
7 9
       backgroundColor: Colors.transparent,
8
-      foregroundColor: Color(0xFF333333),
10
+      foregroundColor: const Color(0xFF333333),
9 11
       elevation: 0,
12
+      toolbarHeight: 44.w,
13
+      titleTextStyle: TextStyle(
14
+        color: const Color(0xFF333333),
15
+        fontWeight: FontWeight.bold,
16
+        fontSize: 17.sp,
17
+      ),
10 18
     ),
11 19
     backgroundColor: Colors.white,
12 20
   );

+ 104
- 0
lib/widgets/layout/BasicPage.dart 查看文件

@@ -0,0 +1,104 @@
1
+
2
+import 'package:flutter/material.dart';
3
+import 'package:get/get.dart';
4
+
5
+abstract class BasicPage extends StatefulWidget {
6
+  // 导航标题
7
+  // 用法 naviTitle = xxxx
8
+  final _title = Rx<String>("");
9
+  set naviTitle(String t) {
10
+    _title.value = t;
11
+  }
12
+
13
+  // 允许滚动 - 不是响应式的
14
+  bool canScroll;
15
+
16
+  //
17
+  BasicPage({Key? key, this.canScroll = true}) : super(key: key);
18
+
19
+  @protected
20
+  Widget builder(BuildContext context);
21
+
22
+  // 将要展示
23
+  @protected
24
+  @mustCallSuper
25
+  void beforeShow() {
26
+    assert(() {
27
+      print("===========beforeShow===========");
28
+      return true;
29
+    }());
30
+  }
31
+
32
+  @protected
33
+  @mustCallSuper
34
+  void beforeHide() {
35
+    assert(() {
36
+      print("===========beforeHide===========");
37
+      return true;
38
+    }());
39
+  }
40
+
41
+  @protected
42
+  @mustCallSuper
43
+  void beforeUnmounted() {
44
+    assert(() {
45
+      print("===========beforeUnmounted===========");
46
+      return true;
47
+    }());
48
+  }
49
+
50
+  @override
51
+  State<BasicPage> createState() => _BasicPageState();
52
+}
53
+
54
+class _BasicPageState extends State<BasicPage> {
55
+
56
+  @override
57
+  void initState() {
58
+    super.initState();
59
+  }
60
+
61
+  @override
62
+  void didChangeDependencies() {
63
+    super.didChangeDependencies();
64
+    widget.beforeShow();
65
+  }
66
+
67
+  @override
68
+  void deactivate() {
69
+    super.deactivate();
70
+    widget.beforeHide();
71
+  }
72
+
73
+  @override
74
+  void dispose() {
75
+    super.dispose();
76
+    widget.beforeUnmounted();
77
+  }
78
+
79
+  // appBar 的样式请查询 theme 文件
80
+  PreferredSizeWidget? _getAppBar() {
81
+    return AppBar(title: Obx(() => Text(widget._title.value)));
82
+  }
83
+
84
+  Widget _buildChild(BuildContext context) {
85
+    if (widget.canScroll) {
86
+      return SingleChildScrollView(
87
+        child: widget.builder(context),
88
+      );
89
+    } else {
90
+      return widget.builder(context);
91
+    }
92
+  }
93
+
94
+  @override
95
+  Widget build(BuildContext context) {
96
+    return Scaffold(
97
+      appBar: _getAppBar(),
98
+      body: SafeArea(
99
+        child: _buildChild(context),
100
+      ),
101
+    );
102
+  }
103
+}
104
+