image - 在文件管理器中替换图像不会替换应用程序中的图像

标签 image flutter dart firebase-storage

我将图像上传到了Firebase存储上。为了在我的flutter应用程序中访问所说的图像,我首先将其下载到设备上,然后使用FileImage来显示图像。但是,如果更改了图像,它仍会显示前一个图像。这是我的代码

  var error;
  Future getImage() async {
    try {
      var image = await ImagePicker.pickImage(
        source: ImageSource.gallery,
      );
      await FirebaseStorage.instance
          .ref()
          .child(userMap['uid'])
          .putFile(image)
          .onComplete;

      await FirebaseStorage.instance
          .ref()
          .child(userMap['uid'])
          .writeToFile(File(path))
          .future;
      setState(() {
        profile = FileImage(File(path));
      });
    } catch (e) {
      error = e;
    }
  }

以下代码显示图像...
GestureDetector(
   onTap: () {
     getImage();
   },
   child: CircleAvatar(
     child: Icon(
     Icons.add_a_photo,
     color: color2.withOpacity(0.5),
     ),
     radius: widget.height * 0.05,
     backgroundColor: color3,
     backgroundImage: profile,
  ),
),

请帮忙

最佳答案

我可以推荐您另一种解决问题的方法。
首先,您不需要使用FileImage,因为很难控制您的缓存
用它。
试试下面的代码:

Future<String> uploadImage(File image) async {
  var reference = FirebaseStorage.insance.ref().child(userMap['uid']);
  var uploadTask = reference.putFile(image); // you can just put your file like that
  var snapshot = await uploadTask.onComplete;
  var location = await snapshot.ref.getDownloadURL(); // and get url with it with this code
  return location.toString()
}

Future getImage() async {
  try {
    var image = await ImagePicker.pickImage(
      source: ImageSource.gallery,
    );
    profile = await uploadImage(image)
    setState((){});
  }
  catch (e) {
    error = e;
  }
}
在使用uploadImage获取网址地址后,请使用库:https://pub.dev/packages/cached_network_image。非常适合处理图像。
GestureDetector(
   onTap: () {
     getImage();
   },
   child: CircleAvatar(
     child: Icon(
     Icons.add_a_photo,
     color: color2.withOpacity(0.5),
     ),
     radius: widget.height * 0.05,
     backgroundColor: color3,
     backgroundImage: CachedNetworkImageProvider(
        imageUrl: profile,
        placeholder: (context, url) => CircularProgressIndicator(),
        errorWidget: (context, url, error) => Icon(Icons.error),
     ),
  ),
),

关于image - 在文件管理器中替换图像不会替换应用程序中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62284359/

相关文章:

image - resizeMode 包含在 native react 中显示图像前后的空间

php - 如何用 PHP 在图片上写不透明的文本?

java - 图像的 JLabel

flutter - 使用选项卡在 flutter 中导航屏幕

Flutter ios 构建在带有 swift_version 的 xcode 10.1 中失败

flutter - 将数据从 API 转换为列表并在依赖的下拉按钮中使用它

javascript - 单击图片元素时切换 img src 和 source srcset

Flutter Future 与 Completer

dart - 如何在flutter小部件测试中发出http请求?

firebase - 更改了Firebase项目,它给了我错误[API key 无效。请传递有效的API key 。身份验证期间