运行 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
文件中添加camera
和storage 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 插件后,Gradle Build 失败