flutter Getx 路由

本文最后更新于:2022年4月22日 上午

Getx 路由,免context

GetX 路由

前置条件

MaterialApp 修改为 GetMaterialApp,然后传入 getPages

void main() {
  runApp(
    GetMaterialApp(
      title: "Application",
      initialRoute: AppPages.INITIAL,
      getPages: AppPages.routes,
    ),
  );
}

routes.dart

class AppPages {
  AppPages._();

  static const INITIAL = Routes.HOME;

  static final routes = [
    GetPage(
      name: _Paths.HOME,
      page: () => HomeView(),
      binding: HomeBinding(),
    ),
  ];
}

路由跳转

功能和原生的类似,也可以通过 await来等待跳转页面的返回结果

匿名路由跳转

Get.to(
  () => Home()
  transition: Transition.rightToLeft  从右向左
  duration: 
  curve: 动画效果
  arguments: 'xxx'
);

关闭当前页面并进入下一个页面(replace)

Get.offNamed("/NextScreen");

关闭所有页面并进入下一个页面

Get.offAllNamed("/NextScreen");

命名路由跳转

Get.toNamed('/home');

路由传参

url参数

Get.offAllNamed("/detail?id=1001&title=苹果");

页面 /controller 接收

print(Get.parameters['id']);  // out: 1001
print(Get.parameters['title']);  // out: 苹果

arguments 参数

Get.toNamed("/NextScreen", arguments: '苹果');

页面 /controller 接收

print(Get.arguments); // out: 苹果

返回上一页

返回传参

Get.back(result:'yyyy');

返回接受参数

Get.toNamed("/detail/1001?title=苹果").then((res){
  print(res); //  out: yyyy
});

动态路由

动态路由注册

getPages: [
   GetPage(name: '/', page: () => MyHomePage()),
   GetPage(name: '/detail/:id', page: () => DetailPage()),
 ],

动态路由跳转

Get.toNamed("/detail/1001?title=苹果");

动态路由接受参数

print(Get.parameters['id']);  // out: 1001
print(Get.parameters['title']);  // out: 苹果

中间件

全局中间件(全局导航守卫)

GetMaterialApp(
  routingCallback: (routing) {
    if(routing.current == '/second'){
      openAds();
    }
  }
)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。