- GetMaterialApp
在main.dart中,确保MyApp返回的是GetMaterialApp而不是MaterialApp
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return GetMaterialApp( // <-- Use GetMaterialApp
title: ‘Flutter Demo’,
home: MyHomePage(title: ‘Flutter Examples’),
);
}
}
这允许Get处理导航/路由,使导航方法可用,例如:Get.to()、Get.dialog()、Get.back()等。如果没有GetMaterialApp作为应用程序的根,当调用任何导航方法时,您将看到一个(令人困惑的)错误:
E/flutter (11139): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception:
‘package:flutter/src/widgets/localizations.dart’: Failed assertion:
line 453 pos 12: ‘context != null’: is not true.
复制
2. Get.dialog +Get.back(结果: X)
让你对Get.dialog的调用期望一个异步返回值…
onPressed: () async {
// assign return value to an observable
return lx.result.value = await Get.dialog(
…。在使用Get.back(result: X)关闭对话框时返回,其中X是通过Get.dialog返回的动态值
onPressed: () => Get.back(result: true),
复制
完整示例:
import 'package:flutter/material.dart';
import 'package:get/get.dart';class LoginX extends GetxController {RxBool result = false.obs;
}class GetDialogReturnPage extends StatelessWidget {final LoginX lx = Get.put(LoginX());Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('GetDialog Return Example'),),body: SafeArea(child: Column(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [Container(child: Obx(() => Text('Value shows here: ${lx.result.value}')),),Container(alignment: Alignment.center,child: RaisedButton(child: Text('Login'),onPressed: () async {// ** assign return value to an observable **return lx.result.value = await Get.dialog(AlertDialog(content: Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [RaisedButton(child: Text('Good Login'),onPressed: () => Get.back(result: true),// ** result: returns this value up the call stack **),SizedBox(width: 5,),RaisedButton(child: Text('Bad Login'),onPressed: () => Get.back(result: false),),],)));},),)],),),);}
}
我的例子参考:
Future<bool?> showRemoveDialog(String title, String content, bool showCheckbox) async {debugPrint(title);return await Get.defaultDialog(title: title,content: Text(content),onConfirm: ()=>Get.back(result: true),onCancel: ()=>Get.back(result: false),);}