GetX组件:代码更简单,入口app需要改成GetMaterialApp,可配置页面跳转动画。
import 'package:get/get.dart';
1. 对话框
Get.defaultDialog(
title:'提示信息',
confirm:ElevatedButton(onPressed(){
// Navigator.pop(context);
Get.back(); // 弹框消失
}, child: Text('确定')),
)
2. SnackBar
Get.snackbar("提示?", "您还没有登录");
3. 底部弹窗,切换主题夜间模式
Get.bottomSheet(
Container(
color: Get.isDarkMode? Colors.black26: Colors.white,
height: 200,
child:Column(
children: [
ListTile(
title: Text('白天模式',
style: TextStyle(color: Get.isDarkMode? Colors.white: Colors.black87)),
leading: Icon(Icons.wb_sunny_outlined, color: Get.isDarkMode? Colors.white: Colors.black87)),
onTap: (){
Get.changeTheme(ThemeData.light()); // 切换主题
Get.back(); // 路由返回
}
),
ListTile(title:Text('夜间模式'), leading:Icon(Icons.wb_sunny),
onTap: (){
Get.changeTheme(ThemeData.dark());
Get.back();
}
),
]
)
)
)
配置路由,并传值:
Map routes = {
//# 配置路由,并传值
'/shop': (context, {arguments})=> ShopPage(arguments: arguments),
}
class ShopPage extends StatefulWidget {
final Map arguments; // 接收命名路由跳转传值
const ShopPage({super.key, require this.arguments});
@override
State<ShipPage> createState() => _ShopPageState();
}
// GetX传值。
Get.toNamed('/shop', arguments;{"id":456});
// 接收值(获取上个页面的传值)
print(Get.arguments);
返回根目录:
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) {
return Tabs(index: 4);
}), (route)=> false);
Get.offAll(Tabs(index: 4); // 一句话,返回根目录。
// 页面跳转
Get.toNamed('/register');
// 页面跳转,不带返回按钮的实现(eg:轮播图页面, 登录界面等)
Get.off(RegisterFirstPage());
中间件:已登录用户,未登录用户页面跳转处理。
import 'package:get/get.dart';
class ShopMiddleWare extends GetMiddleware {
@override
RouteSettings? redirect(String? route){
// 用户权限判断
return RouteSettings(name: '/login', arguments;{}), // 没权限,跳转到登录页面(路由重定向)
// return null; // 跳转到以前的路由,不做任何操作
}
}
// 配置中间件
routes:
GetPage(name:'/shop', page:()=>ShopPage(), middlewares:[ShopMiddleWare()]),