如何在GetxController中将Get.arguments处理为null



我有以下GetX控制器将参数传递到Flutter中的页面:

更新

class HomeController extends GetxController {
File image;
String ocr_text;
onInit(){
super.onInit();
image = Get.arguments['image'];
ocr_text = Get.arguments['ocr_text'];
update();
}
}

绑定:

class HomeBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<HomeController>(() => HomeController());
}
}

我想从Ocr_details页面传递图像

FlatButton(
color: Colors.blue,
child: Icon(Icons.save_outlined),
onPressed: () {
Get.toNamed(
AppRoutes.HOME,
arguments: {'image': controller.image, 'ocr_text': controller.text},
);
}
),

主页:

更新:

Container(
padding: EdgeInsets.all(32),
child:  GetBuilder<HomeController>(
builder: (_) {
return _.image != null
? Image.file(_.image)
: Container();
},
),
),

GetPages

class AppPages {
static var list = [
GetPage(
name: AppRoutes.HOME,
page: () => HomePage(),
binding: HomeBinding(),
),
GetPage(
name: AppRoutes.PICK_IMAGE,
page: () => PickImagePage(),
binding: PickImageBinding(),
),
GetPage(
name: AppRoutes.OCR_DETAILS,
page: () => OCRDetailsPage(),
binding: OCRDetailsBinding(),
)
];
}

路线

class AppRoutes {
static const String HOME = '/';
static const String PICK_IMAGE = '/pick_image';
static const String OCR_DETAILS = '/ocr_details';
}

但我得到了以下错误:生成主页时引发了以下NoSuchMethodError(脏(:方法"[]"是在null上调用的。接收方:空尝试调用:

我不知道是否有一种方法可以检查参数是否为null并继续渲染小部件?

首先,您没有将@override注释与onInit((一起使用。其次,您需要更改GetxController的onReady((。在UI加载后将调用On ready。

代替

class HomeController extends GetxController {
File image;
String ocr_text;
onInit(){
super.onInit();
image = Get.arguments['image'];
ocr_text = Get.arguments['ocr_text'];
update();
}
}

尝试:

class HomeController extends GetxController {
File image;
String ocr_text;
@override
onReady(){
super.onReady();
image = Get.arguments['image'];
ocr_text = Get.arguments['ocr_text'];
update();
}
}

在您想要接收的页面上,

final args = Get.arguments;

class HomeController extends GetxController {
final args = Get.arguments;

}
Container(
padding: EdgeInsets.all(32),
child:  GetBuilder<HomeController>(
builder: (_) {
return args.image != null
? Image.file(args.image)
: Container();
},
),
),],

然后当你需要的时候args.imageargs.ocr_text

而不是这个:

class HomeController extends GetxController {
final File image = Get.arguments['image'];
final String ocr_text = Get.arguments['ocr_text'];
}

使用此:

class HomeController extends GetxController {
File image;
String ocr_text;
onInit(){
super.onInit();
image = Get.arguments['image'];
ocr_text = Get.arguments['ocr_text'];

update();
}
}

更新

我可以看到你正在使用controller.image。您需要在GetBuilder中使用_.image,而不是controller.image

更新2在尝试获取参数和赋值之前,只需检查Get.arguments是否为null

class HomeController extends GetxController {
File image;
String ocr_text;
onInit(){
super.onInit();
if(Get.arguments != null){
image = Get.arguments['image'];
ocr_text = Get.arguments['ocr_text'];
}

}
}

这是一个迟来的答案,但如果有人在2023年仍在使用GetPageRoute时遇到此问题,请将generateRoute(RouteSettings settings)参数传递给GetPageRoute中的settings参数。例如:

return GetPageRoute<bool?>(
settings: settings,
page: () => YourScreen(),
binding: YourBinding(),
transition: Transition.downToUp,
);
final args = Get.arguments ?? "";

检查是否有争论然后检查

final data = Get.arguments["data"] ?? "";

最新更新