一 Getx路由

1. 基本用法

Get.to(Home());// 跳转到指定页面
Get.back();// 返回
Get.off(NextScreen());// 进入下一个页面,但没有返回上一个页面的选项
Get.offAll(NextScreen());// 进入下一个页面并取消之前的所有路由

2. 命名路由

要在程序入口配置

import 'package:flutter/material.dart';
import 'package:flutter_getx_example/NavigationForNamedExample/NavigationForNamedExample.dart';
import 'package:get/get.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: "GetX",
      initialRoute: "/", // 默认路由
      defaultTransition: Transition.zoom,
      getPages: [
        //GetPage 下可无限嵌套子路由
        GetPage(name: "/", page: () => MyApp()),
        GetPage(name: "/home", page: () => Home()),
        GetPage(name: "/my", page: () => My(), transition: Transition.rightToLeft)
      ],
      home: NavigationForNamedExample(),
    );
  }
}
Get.toNamed('/details');// 使用命名路由    

二 路由中间件

路由中间件(用户页面权限认证,需配合全局状态管理)
子路由继承父路由中间件
一个路由可使用多个中间件

1. 声明中间件

class AuthMiddleware extends GetMiddleware {
...
}

2. 第二步 使用中间件

GetPage(name: '/name', page: Name(), middlewares:[AuthMiddleware(priority:1)])

三 GetX 状态管理

GetX 中使用状态管理

  1. 创建obx属性
  2. 监听obx

1. obx属性的三种创建方式

第一种 使用 Rx{Type}

 final name = RxString('');
 final isLogged = RxBool(false);
 final count = RxInt(0);
 final balance = RxDouble(0.0);
 final items = RxList<String>([]);
 final myMap = RxMap<String, int>({});

第二种是使用 Rx,规定泛型 Rx<Type>

final name = Rx<String>('');
final isLogged = Rx<Bool>(false);
final count = Rx<Int>(0);
final balance = Rx<Double>(0.0);
final number = Rx<Num>(0)
final items = Rx<List<String>>([]);
final myMap = Rx<Map<String, int>>({});
// 自定义类 - 可以是任何类
final user = Rx<User>();

第三种添加 .obs 作为属性

final name = ''.obs;
final isLogged = false.obs;
final count = 0.obs;
final balance = 0.0.obs;
final number = 0.obs;
final items = <String>[].obs;
final myMap = <String, int>{}.obs;
//自定义类 - 可以是任何类
final user = User().obs;

2. 监听obx属性

obx()包裹

import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class ObxCountExample extends StatelessWidget {
  RxInt count = RxInt(0);
  // var count = Rx<double>(0);
  // var count = 0.obs;

  void increment() {
    count++;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("GetX Obx---计数器"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Obx(() => Text(
              "count的值为: $count",
              style: TextStyle(color: Colors.red, fontSize: 30),
            )),
            SizedBox(height: 20,),
            ElevatedButton(
              onPressed: () {
                increment();
              },
              child: Text("点我加1"))
          ],
        ),
      ),
    );
  }
}