运行 image_picker 时我的新 android 应用程序崩溃(基于颤振飞镖)

Posted

技术标签:

【中文标题】运行 image_picker 时我的新 android 应用程序崩溃(基于颤振飞镖)【英文标题】:My new android app crash when running image_picker (base on flutter dart) 【发布时间】:2019-12-17 14:43:46 【问题描述】:

我正在开发一个使用 Flutter 进行购物的应用程序,所以我在某个地方堆砌,我需要帮助。

我使用 pub.dev (https://pub.dev/packages/image_picker#-readme-tab-) 上提供的 image_picker 代码,然后我开发了一个用于在我的应用程序上添加产品的页面,因此当我单击相机图标或图库图标来选择图像时,应用程序崩溃并打开相机屏幕/画廊屏幕。

我的大问题是;它在模拟器上运行良好,但在真手机上,它崩溃了。

我尝试使用 pub.dev 上显示的 retrieveLostData(),但我不知道在哪里使用它。

下面是我的代码

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

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

//my imports
import 'package:myshop/main.dart';

class ImageCapture extends StatefulWidget 
  @override
  _ImageCaptureState createState() => _ImageCaptureState();


class _ImageCaptureState extends State<ImageCapture> 
  File _imageFile;

  Future<void> _cropImage() async 
    File cropped = await ImageCropper.cropImage(
        sourcePath: _imageFile.path,);

    setState(() 
      _imageFile = cropped ?? _imageFile;
    );
  
 // pick image from galery or camera
  Future<void> _pickImage(ImageSource source) async 
    File selected = await ImagePicker.pickImage(source: source);

    setState(() 
      _imageFile = selected;
    );
  
   //remove image
  void _clear() 
    setState(() => _imageFile = null);
  



  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        elevation: 0.0,
        backgroundColor: Colors.orange[700],
        title: Text(
          'Image Capture',
          style: TextStyle(fontFamily: 'Exo', fontSize: 13.0),
        ),
        actions: <Widget>[
          IconButton(
            icon: Icon(
              Icons.search,
              color: Colors.white,
              size: 23.0,
            ),
            onPressed: () ,
          ),
          IconButton(
              icon: Icon(
                Icons.home,
                size: 18,
                color: Colors.white,
              ),
              onPressed: () => Navigator.of(context)
                  .push(MaterialPageRoute(builder: (context) => Home())))
        ],
      ),

      //pick image from camera or gallery
      bottomNavigationBar: BottomAppBar(
        color: Colors.cyan[900],
        child: Container( margin: EdgeInsets.fromLTRB(30, 0, 30, 0),
          child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[

              IconButton(
                icon: Icon(Icons.photo_camera, color: Colors.orange, size: 18,),
                onPressed: () => _pickImage(ImageSource.camera),
              ),
              IconButton(
                icon: Icon(Icons.photo_library, color: Colors.orange, size: 18,),
                onPressed: () => _pickImage(ImageSource.gallery),
              ),
            ],
          ),
        ),
      ),

      body: ListView(
        children: <Widget>[
          if (_imageFile != null) ...[
            Image.file(_imageFile),
            Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[
                FlatButton(
                  child: Icon(Icons.crop, size: 18,),
                  onPressed: _cropImage,
                ),
                FlatButton(
                  child: Icon(Icons.refresh,size: 18,),
                  onPressed: _clear,
                ),
              ],
            ),
          ], if (_imageFile==null)...[
            Center(
              child: Text('No Image Captured', style: TextStyle(color: Colors.black54),),
            )
          ]
        ],
      ),
    );
  

【问题讨论】:

欢迎来到 SO!您能否将相关的 logcat 附加到问题中? 【参考方案1】:

您需要在项目的androidManifest.xml文件中添加camerastorage permission

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

另外,您需要在活动中检查两者的运行时权限。

前往Storage permission error in Marshmallow了解更多信息。

【讨论】:

谢谢,现在很好。

以上是关于运行 image_picker 时我的新 android 应用程序崩溃(基于颤振飞镖)的主要内容,如果未能解决你的问题,请参考以下文章

在通道 plugins.flutter.io/image_picke 上找不到方法 pickImage 的实现

在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好

image_picker: ^0.7.2+1 使应用崩溃

在颤振应用程序中添加 image_picker 插件后,Gradle Build 失败

为颤振添加 image_picker 依赖项时出错(iOS)

在颤振插件 image_picker 示例中从图库中选择图像时内存增加