dart 从Flutter中的图片设置值文件

c9x0cxw0  于 2023-06-19  发布在  Flutter
关注(0)|答案(1)|浏览(97)

我有很多数据要发送到我的后台。我为所有需要的数据创建了一个类。我将其命名为service_data,它包含

class ServiceData {
 File? fileBukuServis;
 File? fileSTNK;
 File? fileOwnerManual;
}

之后,我想从相机中拾取图像并将其设置为上面的数据。我使用image_picker包,并使用此函数设置数据

class _DetailCarState extends State<DetailCar> {
  ServiceData serviceData = ServiceData();
  final ImagePicker _picker = ImagePicker();

  Future pickImage({File? imageData, html.File? htmlImageData}) async {
    final XFile? image =
      await _picker.pickImage(source: ImageSource.camera, imageQuality: 50);
    if (image != null) {
      setState(() {
        imageData = File(image.path);
      });
    }
    if (kDebugMode) {
      print(serviceData.fileBukuServis!.path);
    }
  }
}

我用这个来选择图像

ElevatedButton(
 style: ButtonStyle(
   backgroundColor: MaterialStateProperty.all(
    Colors.red[800])),
 onPressed: () {
   if (kIsWeb) {
     pickImage(htmlImageData: serviceData.htmlfileBukuServis);
   }
   pickImage(imageData: serviceData.fileBukuServis);
 },
 child: const Text('Ambil gambar'))

当我从摄像头拍摄图像时,serviceData中的fileBukuServis总是空的。如何设置imagepicker中的数据?

vngu2lb8

vngu2lb81#

在用于拾取图像的方法中,只需修改局部变量imageData并不返回任何内容。

Future pickImage({File? imageData, html.File? htmlImageData}) async {
    final XFile? image =
      await _picker.pickImage(source: ImageSource.camera, imageQuality: 50);
    if (image != null) {
      setState(() {
        imageData = File(image.path); // Won't do anything since variable is in local scope
      });
    }
    if (kDebugMode) {
      print(serviceData.fileBukuServis!.path);
    }
  }

您可以直接更改serviceData.fileBukuServis变量。下面是修改后的代码:

class ServiceData {
   File? fileBukuServis;
   File? htmlfileBukuServis;
   File? fileSTNK;
   File? fileOwnerManual;
}

enum ServiceDataFile{
   fileBukuServis,
   htmlfileBukuServis,
}

class _DetailCarState extends State<DetailCar> {
  ServiceData serviceData = ServiceData();
  final ImagePicker _picker = ImagePicker();

  Future pickImage(ServiceDataFile fileMode) async {
    final XFile? image =
        await _picker.pickImage(source: ImageSource.camera, imageQuality: 50);
    if (image != null) {
      if(fileMode == ServiceDataFile.fileBukuServis){
         serviceData.fileBukuServis = File(image.path);
      } else {
         serviceData.htmlfileBukuServis = File(image.path);
      }
      setState((){});

      if(kDebugMode){
         print(image.path);
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      style: ButtonStyle(
        backgroundColor:
            MaterialStateProperty.all(Colors.red[800]),
      ),
      onPressed: () {
        pickImage(kIsWeb ? ServiceDataFile.htmlfileBukuServis : ServiceDataFile.fileBukuServis);
      },
      child: const Text('Ambil gambar'),
    );
  }
}

另外,您的ServiceData类没有htmlfileBukuServis字段。确保将其添加到代码中。

相关问题