我有以下 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();
},
),
),
获取页面
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';
}
但我收到以下错误: 在构建 HomePage(dirty) 时抛出了以下 NoSuchMethodError: 方法 '[]' 在 null 上被调用。 接收器:空 尝试调用:
我不知道是否有办法检查参数是否为空并继续呈现小部件?
答案 0 :(得分:0)
在您想接收的页面上,
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.image
或 args.ocr_text
答案 1 :(得分:0)
取而代之的是:
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
controller.image
而不是 _.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'];
}
}
}