【问题标题】:How to display image automatically when it's picked (flutter)选择时如何自动显示图像(颤动)
【发布时间】:2021-12-26 13:45:25
【问题描述】:

当我使用 Firebase 存储上传图片时,它不会显示在屏幕上,直到我进行热刷新。所以问题是:当我从画廊或相机中挑选它时,如何自动显示它?谢谢。

代码:

late File file;
  var imagePicker = ImagePicker();
  var imgUrl;
  var refStorage;
  uploadPosterImage() async {
    var pickedImage = await imagePicker.getImage(source: ImageSource.gallery);

    if (pickedImage != null) {
      setState(() {
        file = File(pickedImage.path);
      });

      var imageName = basename(pickedImage.path);

      var rand = Random().nextInt(10000000);
      imageName = "$rand$imageName"; // random number + image name

      refStorage = FirebaseStorage.instance.ref("items/$imageName");

      await refStorage.putFile(file);
      imgUrl = await refStorage.getDownloadURL();

    }
  }

------- 这就是正文中的代码:


Container(
                      margin: EdgeInsets.only(bottom: 10),
                      height: 230,
                      width: 160,
                      decoration: BoxDecoration(
                          border: Border.all(color: Colors.yellow),
                          borderRadius: BorderRadius.circular(20)),
                      child: 
                      //imgUrl==null? 
                      InkWell(
                        onTap: ()async{
                           await uploadPosterImage();
                        },
                        child: imgUrl == null? _icon : Image(image: NetworkImage(imgUrl),)  )

                    ),

【问题讨论】:

    标签: firebase flutter


    【解决方案1】:

    试试下面的代码希望对你有帮助。

    File? imagePicked;
      void cameraImage() async {
        final picker = ImagePicker();
        final pickedImage = await picker.pickImage(
          source: ImageSource.camera,
        );
        final pickedImageFile = File(pickedImage!.path);
        setState(() {
          imagePicked = pickedImageFile;
        });
        Navigator.pop(context);
      }
    
      void gallaryImage() async {
        final picker = ImagePicker();
        final pickedImage = await picker.pickImage(
          source: ImageSource.gallery,
        );
        final pickedImageFile = File(pickedImage!.path);
        setState(() {
          imagePicked = pickedImageFile;
        });
        Navigator.pop(context);
      }
    

    您的小部件:

    Stack(
                      children: [
                        Container(
                          margin: EdgeInsets.all(8),
                          child: CircleAvatar(
                            radius: 71,
                            backgroundColor: Colors.black,
                            child: CircleAvatar(
                              backgroundColor: Colors.white,
                              radius: 69,
                              backgroundImage: imagePicked == null
                                  ? null
                                  : FileImage(
                                      imagePicked!,
                                    ),
                            ),
                          ),
                        ),
                        Positioned(
                          left: 90,
                          top: 90,
                          child: RawMaterialButton(
                            fillColor: Theme.of(context).backgroundColor,
                            padding: EdgeInsets.all(10),
                            shape: CircleBorder(),
                            onPressed: () {
                              showDialog(
                                context: context,
                                builder: (context) {
                                  return AlertDialog(
                                    title: Text(
                                      'Choose Option',
                                    ),
                                    content: SingleChildScrollView(
                                      child: Column(
                                        crossAxisAlignment: CrossAxisAlignment.start,
                                        children: [
                                          TextButton.icon(
                                            onPressed: cameraImage,
                                            label: Text(
                                              'Camera',
                                              style: TextStyle(
                                                color: Colors.black,
                                              ),
                                            ),
                                            icon: Icon(
                                              Icons.camera,
                                            ),
                                          ),
                                          TextButton.icon(
                                            onPressed: gallaryImage,
                                            label: Text(
                                              'Gallery',
                                              style: TextStyle(
                                                color: Colors.black,
                                              ),
                                            ),
                                            icon: Icon(Icons.image),
                                          ),
                                          
                                        ],
                                      ),
                                    ),
                                  );
                                },
                              );
                            },
                            child: Icon(
                              Icons.add_a_photo,
                            ),
                          ),
                        ),
                      ],
                    ),
    

    图像选择前您的屏幕:

    您的屏幕后图像选择:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2019-04-06
      • 2021-12-25
      相关资源
      最近更新 更多