sar*_*unw 7 flutter flutter-getx
我有一个页面,可以根据该页面的启动位置以两种方式呈现:模态和推送。
我曾经toNamed展示这些页面,但问题是我无法fullscreenDialog在调用站点传递标志。我期待这样的事情:
Get.toNamed('pageName', fullscreenDialog: false);
Run Code Online (Sandbox Code Playgroud)
那么,这种工作我需要两条路线和两个页面吗?像这样的东西:
GetPage(
name: 'pageNameDialog',
page: () => QuestionPage(),
fullscreenDialog: true,
binding: QuestionBinding(),
),
GetPage(
name: 'pageNamePush',
page: () => QuestionPage(),
fullscreenDialog: false,
binding: QuestionBinding(),
),
Run Code Online (Sandbox Code Playgroud)
我认为这应该是一个更好的方法,但我对 Flutter 和 getx 真的很陌生,不知道我应该搜索什么。有人有解决方案吗?否则,我可能不得不加倍我的路线和页面,这是相当多余的。
创建一个这样的类
class Go {
/// Similar to **Navigation.push()**
static Future<T?> to<T>(dynamic page, {dynamic arguments, Transition? transition, bool? opaque}) async {
return await Get.to<T>(page,
arguments: arguments,
transition: transition ?? Transition.rightToLeft,
duration: const Duration(milliseconds: 350),
opaque: opaque);
}
/// Similar to **Navigation.pushReplacement**
static Future<dynamic> off(dynamic page, {dynamic arguments, Transition? transition}) async {
Get.off(
page,
arguments: arguments,
transition: transition ?? Transition.rightToLeft,
duration: const Duration(milliseconds: 350),
);
}
/// Similar to **Navigation.pushAndRemoveUntil()**
static Future<dynamic> offUntil(dynamic page, {Transition? transition}) async {
Get.offUntil(
GetPageRoute(
page: page,
transition: transition ?? Transition.rightToLeft,
transitionDuration: const Duration(milliseconds: 350),
),
(route) => false);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的视图或控制器中
// BEST PRACTICE
// you can pass any object.
var args = {'data': 'data that you want to pass'};
Go.to(() => const HomeView(), arguments: args);
Run Code Online (Sandbox Code Playgroud)
现在要获取您传递的值,HomeView请使用下面的代码。
class HomeController extends GetxController {
@override
void onInit() async {
super.onInit();
var args = Get.arguments['data'];
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
类似的方法也适用于其他人。
您可以将标志作为参数传递,如下所示:
Get.toNamed('pageName', arguments: true);
Run Code Online (Sandbox Code Playgroud)
在您要去的页面上,您可以点击:
Get.arguments;
Run Code Online (Sandbox Code Playgroud)
这将在 pageName 上返回 true。
现在,参数参数类型是动态的,因此您可以传递任何参数,如果您想要多个参数,也可以传递 List 或 Map。
希望这是您想要实现的目标。
| 归档时间: |
|
| 查看次数: |
12836 次 |
| 最近记录: |