0

我正在使用下面的代码从画廊中上传图片,如果没有从画廊中提取图片,我希望将图片从画廊assets上传到 Firebase 存储,因为这avatarImageFile应该等同于来自的图像文件资产。我怎样才能做到这一点?

Future getImage() async {
    print("get image");

    PickedFile image = await _picker.getImage(source: ImageSource.gallery);

    if (image != null) {
      setState(() {
        final File file = File(image.path);
        avatarImageFile = file;
        isLoading = true;

      });
    }
    else{
      //if image is null then the image from the assets should be made picked into `avatarImageFile `

   }


  }
4

1 回答 1

1

在 Flutter 中,您可以通过两种方式加载资源:

  • 用于rootBundle.loadString("assets/my_file.json")加载文本文件

  • 用于rootBundle.load("assets/something.png")加载任何类型的文件(图像、pdf 或任何其他类型的二进制文件)。

请注意,它load也适用于 .json 文件,但通常 loadString 在检索文本时是更好的选择。有关更多信息,请阅读文档

avatarImageFile = await rootBundle.load("assets/a/b/c.png");

当您在小部件中时不要使用 rootBundle:相反,更喜欢使用DefaultAssetBundle

class MyWidget extends StatelessWidget {
  const MyWidget();

  Future<String> loadConfig(BuildContext context) async =>
    await DefaultAssetBundle
    .of(context)
    .loadString("myassets/some_cfg.json");

  @override
  Widget build(BuildContext context) {...}

}

同样,当您在小部件中时执行上述操作。在任何其他情况下,请选择rootBundle.

于 2020-07-06T07:23:33.390 回答