【问题标题】:image_picker It does not allow me to load an image from gallery or cameraimage_picker 它不允许我从画廊或相机加载图像
【发布时间】:2022-08-18 22:24:45
【问题描述】:

一切正常,但是当我单击从图库或相机中加载图像时,它不会加载图像

VSC 调试控制台中的消息是:

D/MediaScannerConnection(5069):扫描/data/user/0/com.lot.sig/cache/ce7735c2-8d36-4633-996f-bfae03424df26527509175807023631.jpg为空

这是我的 user_profile.dart:

import \'package:flutter/material.dart\';
  import \'dart:async\';
  import \'dart:io\';

  import \'package:image_cropper/image_cropper.dart\';
  import \'package:image_picker/image_picker.dart\';

class UserProfile extends StatefulWidget {

  UserProfile();

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

enum AppState {
  free,
  picked,
  cropped,
}

class _UserProfile extends State<UserProfile> {
  AppState? state;
  File? imageFile;

  @override
  void initState() {
    super.initState();
    state = AppState.free;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.black87,
        title: Text(\"Hola\"),
      ),
      body: Center(
        child: imageFile != null ? Image.file(imageFile!) : Container(),
      ),
      floatingActionButton: FloatingActionButton(
        backgroundColor: Colors.black87,
        onPressed: () {
          if (state == AppState.free)
            _pickImage();
          else if (state == AppState.picked)
            _cropImage();
          else if (state == AppState.cropped) _clearImage();
        },
        child: _buildButtonIcon(),
      ),
    );
  }

  Widget _buildButtonIcon() {
    if (state == AppState.free)
      return Icon(Icons.add);
    else if (state == AppState.picked)
      return Icon(Icons.crop);
    else if (state == AppState.cropped)
      return Icon(Icons.clear);
    else
      return Container();
  }

  Future<Null> _pickImage() async {
    final _imageFile = await ImagePicker().pickImage(source: ImageSource.gallery);
    if (_imageFile != null) {
      imageFile = File(_imageFile.path);
      setState(() {
        state = AppState.picked;
      });
    }
  }

  Future<Null> _cropImage() async {
    File? croppedFile = await ImageCropper.cropImage(
        sourcePath: imageFile!.path,
        aspectRatioPresets: Platform.isAndroid
            ? [
          CropAspectRatioPreset.square,
          CropAspectRatioPreset.ratio3x2,
          CropAspectRatioPreset.original,
          CropAspectRatioPreset.ratio4x3,
          CropAspectRatioPreset.ratio16x9
        ]
            : [
          CropAspectRatioPreset.original,
          CropAspectRatioPreset.square,
          CropAspectRatioPreset.ratio3x2,
          CropAspectRatioPreset.ratio4x3,
          CropAspectRatioPreset.ratio5x3,
          CropAspectRatioPreset.ratio5x4,
          CropAspectRatioPreset.ratio7x5,
          CropAspectRatioPreset.ratio16x9
        ],
        androidUiSettings: AndroidUiSettings(
            toolbarTitle: \'Cropper\',
            toolbarColor: Colors.deepOrange,
            toolbarWidgetColor: Colors.white,
            initAspectRatio: CropAspectRatioPreset.original,
            lockAspectRatio: false),
        iosUiSettings: IOSUiSettings(
          title: \'Cropper\',
        ));
    if (croppedFile != null) {
      imageFile = croppedFile;
      setState(() {
        state = AppState.cropped;
      });
    }
  }

  void _clearImage() {
    imageFile = null;
    setState(() {
      state = AppState.free;
    });
  }
}

    标签: flutter imagepicker


    【解决方案1】:

    这是我的 image_picker_handler.dart :

        import 'dart:async';
    import 'dart:io';
    
    import 'package:flutter/material.dart';
    import 'package:image_cropper/image_cropper.dart';
    import 'package:image_picker/image_picker.dart';
    import 'package:sig/utilitary/image_picker_dialog.dart';
    
    class ImagePickerHandler {
      late ImagePickerDialog imagePicker;
      AnimationController? _controller;
      ImagePickerListener _listener;
    
      ImagePickerHandler(this._listener, this._controller);
    
      final ImagePicker _picker = ImagePicker();
    
      openCamera() async {
        imagePicker.dismissDialog();
        var image = await (_picker.pickImage(source: ImageSource.camera) as FutureOr<XFile>);
        cropImage(image);
      }
    
      openGallery() async {
        imagePicker.dismissDialog();
        var image = await (_picker.pickImage(source: ImageSource.gallery) as FutureOr<XFile>);
        cropImage(image);
      }
    
      void init() {
        imagePicker = new ImagePickerDialog(this, _controller);
        imagePicker.initState();
      }
    
      Future cropImage(XFile image) async {
        File? croppedFile = await ImageCropper.cropImage(
          sourcePath: image.path,
          maxWidth: 512,
          maxHeight: 512,
        );
        _listener.userImage(croppedFile);
      }
    
      showDialog(BuildContext context) {
        imagePicker.getImage(context);
      }
    }
    
    abstract class ImagePickerListener {
      userImage(File? _image);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2022-09-27
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      相关资源
      最近更新 更多