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

时间:2021-04-08 19:28:36

标签: flutter dart getx flutter-getx

我有以下 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 上被调用。 接收器:空 尝试调用:

我不知道是否有办法检查参数是否为空并继续呈现小部件?

2 个答案:

答案 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.imageargs.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'];
      }
      
   }

}