如何从资产上传图片?

时间:2020-07-06 07:05:55

标签: flutter imagepicker

我正在使用下面的代码从画廊中上传图片,如果万一未从画廊中拿起图片,我希望将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 `

   }


  }

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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