Flutter 在第二次尝试中传递图像,而不是在第一次尝试中传递图像

Flutter 在第二次尝试中传递图像,而不是在第一次尝试中传递图像,flutter,flutter-dependencies,Flutter,Flutter Dependencies,我需要一些关于Flitter中图像选择器插件的帮助。当我在“警报”对话框中按“图像”或“多媒体资料”并选择“我的图像”时,背景图像显示但未通过/保存,但当我再次在“警报”对话框中按“图像”或“多媒体资料”并选择“我的图像”时,背景图像显示且通过/保存。我该怎么办 import 'dart:io'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; class User

我需要一些关于Flitter中图像选择器插件的帮助。当我在“警报”对话框中按“图像”或“多媒体资料”并选择“我的图像”时,背景图像显示但未通过/保存,但当我再次在“警报”对话框中按“图像”或“多媒体资料”并选择“我的图像”时,背景图像显示且通过/保存。我该怎么办

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

class UserImagePicker extends StatefulWidget {
  UserImagePicker(this.imagePickfn);

  final void Function(File pickedImage) imagePickfn;

  @override
  _UserImagePickerState createState() => _UserImagePickerState();
}

class _UserImagePickerState extends State<UserImagePicker> {
  File _pickedImage;

  void _pickImage() {
    showDialog<ImageSource>(
      context: context,
      builder: (context) =>
          AlertDialog(title: Text("Choose image source"), actions: [
        FlatButton(
          child: Text("Camera"),
          onPressed: () => Navigator.pop(context, ImageSource.camera),
        ),
        FlatButton(
          child: Text("Gallery"),
          onPressed: () => Navigator.pop(context, ImageSource.gallery),
        ),
      ]),
    ).then((ImageSource source) async {
      if (source != null) {
        final pickedFile = await ImagePicker().getImage(
          source: source,
          imageQuality: 50,
          maxWidth: 150,
        );
        setState(() => _pickedImage = File(pickedFile.path));
      }
    });
    widget.imagePickfn(_pickedImage);
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        CircleAvatar(
          radius: 40,
          backgroundColor: Theme.of(context).primaryColor,
          backgroundImage:
              _pickedImage != null ? FileImage(_pickedImage) : null,
        ),
        FlatButton.icon(
          textColor: Theme.of(context).primaryColor,
          onPressed: _pickImage,
          icon: Icon(Icons.image),
          label: Text('Add an Image'),
        ),
      ],
    );
  }
}
导入'dart:io';
进口“包装:颤振/材料.省道”;
导入“包:image_picker/image_picker.dart”;
类UserImagePicker扩展StatefulWidget{
UserImagePicker(this.imagePickfn);
最终无效函数(文件pickedImage)imagePickfn;
@凌驾
_UserImagePickerState createState()=>\u UserImagePickerState();
}
类_UserImagePickerState扩展状态{
文件_pickedImage;
void _pickImage(){
显示对话框(
上下文:上下文,
生成器:(上下文)=>
AlertDialog(标题:文本(“选择图像源”),操作:[
扁平按钮(
子:文本(“摄影机”),
按下:()=>Navigator.pop(上下文、ImageSource.camera),
),
扁平按钮(
儿童:文本(“图库”),
按下:()=>Navigator.pop(上下文,ImageSource.gallery),
),
]),
).then((图像源)异步{
如果(源!=null){
final pickedFile=Wait ImagePicker().getImage(
资料来源:资料来源,
图像质量:50,
最大宽度:150,
);
setState(()=>_pickedImage=File(pickedFile.path));
}
});
widget.imagePickfn(_pickedImage);
}
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
圆形(
半径:40,
背景色:主题。背景色,
背景图片:
_pickedImage!=null?文件映像(_pickedImage):null,
),
FlatButton.icon(
textColor:Theme.of(context.primaryColor),
按下按钮:_pickImage,
图标:图标(Icons.image),
标签:文本(“添加图像”),
),
],
);
}
}

问题出在
\u pickImage()
方法中。您需要移动widget.imagePickfn(_pickedImage)内部
然后
部分。像这样

void _pickImage() {
    showDialog<ImageSource>(
      context: context,
      builder: (context) =>
          AlertDialog(title: Text("Choose image source"), actions: [
        FlatButton(
          child: Text("Camera"),
          onPressed: () => Navigator.pop(context, ImageSource.camera),
        ),
        FlatButton(
          child: Text("Gallery"),
          onPressed: () => Navigator.pop(context, ImageSource.gallery),
        ),
      ]),
    ).then((ImageSource source) async {
      if (source != null) {
        final pickedFile = await ImagePicker().getImage(
          source: source,
          imageQuality: 50,
          maxWidth: 150,
        );
        setState(() => _pickedImage = File(pickedFile.path));
        widget.imagePickfn(_pickedImage);
      }
    });
  }

它不起作用,再次在第二次尝试中接受输入。添加了另一个解决方案,希望第二个解决方案能够解决您的问题。它不起作用,再次是相同的问题。在第二次尝试中拾取图像。谢谢你的回复。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

class UserImagePicker extends StatefulWidget {
  UserImagePicker(this.imagePickfn);

  final void Function(File pickedImage) imagePickfn;

  @override
  _UserImagePickerState createState() => _UserImagePickerState();
}

class _UserImagePickerState extends State<UserImagePicker> {
  File _pickedImage;

  void _pickImage() async {
    ImageSource source = await showDialog<ImageSource>(
      context: context,
      builder: (context) =>
          AlertDialog(title: Text("Choose image source"), actions: [
        FlatButton(
          child: Text("Camera"),
          onPressed: () => Navigator.pop(context, ImageSource.camera),
        ),
        FlatButton(
          child: Text("Gallery"),
          onPressed: () => Navigator.pop(context, ImageSource.gallery),
        ),
      ]),
    );
    
    if (source != null) {
      final pickedFile = await ImagePicker().getImage(
        source: source,
        imageQuality: 50,
        maxWidth: 150,
      );
      setState(() => _pickedImage = File(pickedFile.path));
      widget.imagePickfn(_pickedImage);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        CircleAvatar(
          radius: 40,
          backgroundColor: Theme.of(context).primaryColor,
          backgroundImage:
              _pickedImage != null ? FileImage(_pickedImage) : null,
        ),
        FlatButton.icon(
          textColor: Theme.of(context).primaryColor,
          onPressed: () => _pickImage(),
          icon: Icon(Icons.image),
          label: Text('Add an Image'),
        ),
      ],
    );
  }
}