【问题标题】:How to update Widget with changed File variable using GetX如何使用 GetX 使用更改的文件变量更新小部件
【发布时间】:2021-02-18 17:14:02
【问题描述】:

我的应用中有以下小部件:

 @override
  Widget build(BuildContext context) {

        return Scaffold(

          bottomNavigationBar: BottomAppBar(
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
               
                IconButton(
                  icon: Icon(
                    Icons.photo_library,
                    size: 30,
                  ),
                  onPressed: () => _pickImage(ImageSource.gallery),
                  color: Colors.pink,
                ),
              ],
            ),
          ),
          body: ListView(
            children: <Widget>[
              if (_imageFile != null) ...[
                Container(
                    padding: EdgeInsets.all(32),
                    child: Image.file(_imageFile)),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                   
                    FlatButton(
                      color: Colors.blue,
                      child: Icon(Icons.arrow_forward_ios),
                      onPressed: () =>
                          Get.toNamed(
                            AppRoutes.OCR_DETAILS,
                            arguments: {'image': _imageFile},
                          ),
                    ),
                  ],
                ),
              ]
            ],
          )
        );
      }

以及以下功能来选择图像:

Future _pickImage(ImageSource source) async {
    File selected = await ImagePicker.pickImage(source: source);
      _imageFile = selected;
      _imageLoaded=true;
  }

我想导入文件 (_imageFile) 并在导入后将其显示在当前小部件上。 我想使用 GetX 库。 非常感谢您的帮助。

【问题讨论】:

  • 您找到解决方案了吗?

标签: flutter dart flutter-getx


【解决方案1】:

编辑:切换到从画廊而不是相机中选择。另外仅供参考,该软件包的 pickImage 已弃用,因此我们改用 getImage

设置一个 ImageController GetX 类。

class ImageController extends GetxController {
  File image;
  final picker = ImagePicker();

  Future<void> getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.gallery);

    if (pickedFile != null) {
      image = File(pickedFile.path);
    } else {
      print('No image selected.');
    }
    update();
  }
}

初始化控制器,可以在 main 或 build 方法中进行。在你运行你的应用程序之前,让我们在 main 中执行它。

Get.lazyPut<ImageController>(() => ImageController(), fenix: true);

然后在你的页面上你可以找到控制器。

final controller = Get.find<ImageController>();

在按钮的 onPressed 中,从 ImageController 类中触发 getImage 方法

controller.getImage();

然后,只要将它放在 UI 中的任何需要它的地方,就可以了。

      GetBuilder<ImageController>(
                  builder: (_) {
                    return controller.image != null
                        ? Image.file(controller.image)
                        : Container();
                  },
                ),

【讨论】:

  • 非常感谢您的帮助。我认为我非常接近解决方案,但不知何故我在小部件中看不到导入的文件。也许你可以看看代码:github.com/ertiusmeo/flutter-getx-scaffolding-example-main
  • 您没有将Image.file(controller.image) 包装在GetBuilder&lt; PickImageController&gt; 中,所以没有什么告诉它要重建。那应该为你做。
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 2021-07-22
  • 2023-01-13
  • 2020-07-09
  • 1970-01-01
  • 2019-02-06
  • 2014-06-25
  • 1970-01-01
相关资源
最近更新 更多