张延森 3 anos atrás
pai
commit
6b027b68ca

+ 5
- 4
lib/main.dart Ver arquivo

@@ -2,12 +2,14 @@ import 'dart:async';
2 2
 
3 3
 import 'package:farmer_client/models/Store.dart';
4 4
 import 'package:farmer_client/pages/home.dart';
5
+import 'package:farmer_client/pages/splash.dart';
5 6
 import 'package:farmer_client/pages/login/login.dart';
6 7
 import 'package:flutter/material.dart';
7 8
 import 'package:get/get.dart';
8 9
 import 'package:get_storage/get_storage.dart';
9 10
 import 'package:flutter_screenutil/flutter_screenutil.dart';
10 11
 
12
+import 'routes/index.dart';
11 13
 import 'widgets/OrderListCard.dart';
12 14
 
13 15
 
@@ -32,11 +34,10 @@ class MyApp extends StatelessWidget {
32 34
       splitScreenMode: true,
33 35
       builder: (_) {
34 36
         return GetMaterialApp(
35
-          initialRoute: '/home',
37
+          initialRoute: '/splash',
36 38
           defaultTransition: Transition.native,
37
-          getPages: [
38
-            GetPage(name: '/home', page: () => box.hasData('token') ? Home() : MyRouteLogin()),
39
-          ],
39
+          routingCallback: routingCallback,
40
+          getPages: pages,
40 41
         );
41 42
       },
42 43
     );

+ 2
- 1
lib/pages/home.dart Ver arquivo

@@ -1,12 +1,13 @@
1 1
 
2 2
 import 'package:farmer_client/models/User.dart';
3
+import 'package:flutter/material.dart';
3 4
 import 'package:flutter/widgets.dart';
4 5
 import 'package:get/get.dart';
5 6
 
6 7
 class Home extends GetView<User> {
7 8
   @override
8 9
   Widget build(BuildContext context) {
9
-    return Text("首页示例");
10
+    return Scaffold(body: Text("首页"),);
10 11
   }
11 12
 
12 13
 }

+ 4
- 0
lib/pages/index.dart Ver arquivo

@@ -0,0 +1,4 @@
1
+
2
+export 'home.dart';
3
+export 'splash.dart';
4
+export 'login/login.dart';

+ 0
- 22
lib/pages/launch.dart Ver arquivo

@@ -1,22 +0,0 @@
1
-
2
-
3
-import 'package:flutter/widgets.dart';
4
-
5
-class Launch extends StatefulWidget {
6
-  @override
7
-  State<StatefulWidget> createState() => LaunchState();
8
-}
9
-
10
-class LaunchState extends State<Launch> {
11
-
12
-  // 默认 3s
13
-  int _countdown = 3;
14
-
15
-  @override
16
-  Widget build(BuildContext context) {
17
-    // TODO: implement build
18
-    throw UnimplementedError();
19
-  }
20
-
21
-}
22
-

+ 53
- 0
lib/pages/splash.dart Ver arquivo

@@ -0,0 +1,53 @@
1
+
2
+
3
+import 'dart:async';
4
+
5
+import 'package:farmer_client/utils/timer.dart';
6
+import 'package:flutter/widgets.dart';
7
+import 'package:get/get.dart';
8
+
9
+import 'home.dart';
10
+
11
+class SplashScreen extends StatefulWidget {
12
+  @override
13
+  State<StatefulWidget> createState() => SplashScreenState();
14
+}
15
+
16
+class SplashScreenState extends State<SplashScreen> {
17
+
18
+  // 默认 3s
19
+  int _countdown = 3;
20
+  Timer? _timer;
21
+
22
+  @override
23
+  void initState() {
24
+    super.initState();
25
+
26
+    _timer = setInterval((_) {
27
+      if (_countdown <= 1) {
28
+        _timer?.cancel();
29
+        _timer = null;
30
+        Get.off(Home(), routeName: '/');
31
+      }
32
+
33
+      setState(() {
34
+        debugPrint('------------------');
35
+        debugPrint(_countdown.toString());
36
+        _countdown -= 1;
37
+      });
38
+    }, 1000);
39
+  }
40
+
41
+  @override
42
+  void dispose() {
43
+    super.dispose();
44
+    _timer?.cancel();
45
+  }
46
+
47
+  @override
48
+  Widget build(BuildContext context) {
49
+    return Text("引导页");
50
+  }
51
+
52
+}
53
+

+ 3
- 0
lib/routes/index.dart Ver arquivo

@@ -0,0 +1,3 @@
1
+
2
+export 'pages.dart';
3
+export 'middleWares.dart';

+ 16
- 0
lib/routes/middleWares.dart Ver arquivo

@@ -0,0 +1,16 @@
1
+
2
+import 'package:flutter/scheduler.dart';
3
+import 'package:get/get.dart';
4
+import 'package:get_storage/get_storage.dart';
5
+
6
+void routingCallback (routing) {
7
+  GetStorage box = GetStorage();
8
+  bool isLogin = box.hasData('token');
9
+  bool isSplashScreen = routing?.current == '/splash';
10
+  bool isLoginPage = routing?.current == '/login';
11
+  if (!isLogin && !isSplashScreen && !isLoginPage) {
12
+    // addPostFrameCallback 作用是等当前帧绘制完成之后再加载
13
+    // https://github.com/jonataslaw/getx/issues/262
14
+    SchedulerBinding.instance?.addPostFrameCallback((_) => Get.toNamed('/login'));
15
+  }
16
+}

+ 9
- 0
lib/routes/pages.dart Ver arquivo

@@ -0,0 +1,9 @@
1
+
2
+import 'package:get/get.dart';
3
+import '../pages/index.dart';
4
+
5
+List<GetPage> pages = [
6
+  GetPage(name: '/', page: () =>  Home()),
7
+  GetPage(name: '/splash', page: () => SplashScreen()),
8
+  GetPage(name: '/login', page: () =>  MyRouteLogin()),
9
+];

+ 4
- 8
lib/utils/timer.dart Ver arquivo

@@ -6,11 +6,7 @@ Timer setInterval(void Function (Timer) f, int milliseconds) {
6 6
   return Timer.periodic(duration, f);
7 7
 }
8 8
 
9
-//
10
-// Timer setTimeout(void Function () f, int milliseconds) {
11
-//   if
12
-//
13
-//
14
-//   var duration = Duration(milliseconds: milliseconds);
15
-//   return Timer(duration, f);
16
-// }
9
+Timer setTimeout(void Function () f, int milliseconds) {
10
+  var duration = Duration(milliseconds: milliseconds);
11
+  return Timer(duration, f);
12
+}