一 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 中使用状态管理
- 创建obx属性
- 监听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"))
],
),
),
);
}
}