这是代码,我用于image_picker来显示相机或画廊图像。在主要功能中另外使用.dart文件作为我在RunApp()下运行此代码。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
class Display_Image extends StatefulWidget {
@override
_Display_ImageState createState() => _Display_ImageState();
}
class _Display_ImageState extends State<Display_Image> {
File _image;
void ImageGrab(int i)
async {
setState(() {
ShowSpinner=true;
});
try
{
if(i==1) {
File gallerfile = await ImagePicker.pickImage(
source: ImageSource.gallery);
_image=gallerfile;
setState(() {
ShowSpinner=false;
});
}
else {
File gallerfile = await ImagePicker.pickImage(
source: ImageSource.camera);
_image=gallerfile;
setState(() {
ShowSpinner=false;
});}
//print('Selected image path: ${gallerfile.path}');
}
catch(e)
{
print(e);
}
}
bool ShowSpinner=false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Picker Test'),
),
//backgroundColor: Colors.deepPurpleAccent,
body: ModalProgressHUD(
inAsyncCall: ShowSpinner,
child: Column(
children: <Widget>[
//SizedBox(height: 10,),
Container(
color: Colors.deepPurpleAccent,
height: 50,
child: Row(
children: <Widget>[
SizedBox(width: 20,),
FlatButton(
child: Icon(Icons.camera),
onPressed: (){
ImageGrab(0);
},
),
SizedBox(width: 120,),
FlatButton(
child: Icon(Icons.image),
onPressed: (){
ImageGrab(1);
},
),
SizedBox(width: 20,)
],
),
),
//SizedBox(height: 10,),
Expanded(
child:Container(
width: double.infinity,
child: _image==null?Text('Image Appears here'):Image.file(_image),
color: Colors.greenAccent,
),
),
],
),
),
);
}
}
这是UI图片:
现在,我面临的两个问题是: 1.当我使用照相机按钮显示照相机图像时,照相机UI打开,捕获图像,按下复选按钮,UI继续加载,但不显示图像。 2.当我重新启动应用程序并重新运行它时,即使按了从头开始运行该应用程序时效果很好的画廊按钮,UI仍会继续加载,它会在控制台中显示一条消息,提示:
I / flutter(14072):PlatformException(已经激活,图像选择器为 已经激活,为空)
请注意,只有在遇到我提到的第二种情况时才会发生这种情况。 此外,我正在使用版本号 image_picker:^ 0.5.4 + 1 ,因为我正在使用firebase的mlkit库,如果我使用image_picker的新版本,则会引发大量消息,并产生大量错误。
请仔细研究一下,让我知道如何进一步进行下去。预先感谢。
答案 0 :(得分:0)
所以这是我解决的问题。 确保的要点是:
要解决问题2,您需要进行一些非常重要的更改,并且就我所知,您只能通过以下更改来做到这一点:
步骤1。转到android文件夹下的gradle.properties,并添加以下代码:
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
第2步。现在转到android下的build.gradle,而不是app-> build.gradle下的。在查看文件时,请确保它以builscript开头(这样可以确保您使用的是正确的build.gradle文件。)
第3步。Ctrl+ A该文件中的所有内容,请注意ctrl + A您需要擦除所有内容并粘贴以下代码的所有内容:
buildscript {
ext.kotlin_version = '1.3.0'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.2.0'
}
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "27.1.1"
}
if (details.requested.group == 'androidx.core'
&& !details.requested.name.contains('androidx') ) {
details.useVersion "1.0.1"
}
}
}
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
需要注意的非常重要的一点是,在编译过程中,您很可能会看到此警告消息为红色。请不要害怕它,让整个编译完成,然后再得出任何结论。尽管它显示为红色,但它不会停止编译,因为您将在底部看到一个旋转的圆圈,该圆圈将显示编译的进度。此后,它将消失,您将能够运行该应用程序。这是警告消息:
注意: C:\ flutter.pub-cache \ hosted \ pub.dartlang.org \ cloud_firestore-0.12.11 \ android \ src \ main \ java \ io \ flutter \ plugins \ firebase \ cloudfirestore \ CloudFirestorePlugin.java 使用或覆盖已弃用的API。注意:重新编译 -Xlint:不建议使用。注意:C:\ flutter.pub-cache \ hosted \ pub.dartlang.org \ cloud_firestore-0.12.11 \ android \ src \ main \ java \ io \ flutter \ plugins \ firebase \ cloudfirestore \ CloudFirestorePlugin.java 使用未经检查或不安全的操作。注意:重新编译 -Xlint:未经检查以获取详细信息。错误:[TAG]无法解析变量'$ {animal.sniffer.version}'注意: C:\ flutter.pub-cache \ hosted \ pub.dartlang.org \ mlkit-0.15.0 \ android \ src \ main \ java \ com \ azihsoyn \ flutter \ mlkit \ MlkitPlugin.java使用未经检查或不安全的操作。注意:重新编译 -Xlint:无需检查详细信息。
轰!而已。相信我,这一定会解决您的问题。
如果您仍然遇到任何此类问题,请尝试实施本link中提到的其他解决方案。