Flutter 为什么摄像机不能从图像选择器工作?

Flutter 为什么摄像机不能从图像选择器工作?,flutter,flutter-dependencies,imagepicker,Flutter,Flutter Dependencies,Imagepicker,这是代码,我使用图像选择器来显示相机或画廊图像。在主函数中另外使用.dart文件,我在RunApp()下运行此代码 导入'dart:io'; 进口“包装:颤振/材料.省道”; 导入“包:image_picker/image_picker.dart”; 导入“程序包:modal_progress_hud/modal_progress_hud.dart”; 类显示\图像扩展StatefulWidget{ @凌驾 _Display_ImageState createState()=>_Display_

这是代码,我使用图像选择器来显示相机或画廊图像。在主函数中另外使用.dart文件,我在RunApp()下运行此代码

导入'dart:io';
进口“包装:颤振/材料.省道”;
导入“包:image_picker/image_picker.dart”;
导入“程序包:modal_progress_hud/modal_progress_hud.dart”;
类显示\图像扩展StatefulWidget{
@凌驾
_Display_ImageState createState()=>_Display_ImageState();
}
类_显示_图像状态扩展状态{
文件图像;
无效图像抓取(int i)
异步的{
设置状态(){
ShowSpinner=true;
});
尝试
{
如果(i==1){
File gallerfile=wait ImagePicker.pickImage(
资料来源:ImageSource.gallery);
_图像=gallerfile;
设置状态(){
ShowSpinner=false;
});
}
否则{
File gallerfile=wait ImagePicker.pickImage(
来源:ImageSource.camera);
_图像=gallerfile;
设置状态(){
ShowSpinner=false;
});}
//打印('所选图像路径:${gallerfile.path}');
}
捕获(e)
{
印刷品(e);
}
}
bool ShowSpinner=false;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“图像选择器测试”),
),
//背景颜色:颜色。深紫色,
正文:ModalProgressHUD(
inAsyncCall:ShowSpinner,
子:列(
儿童:[
//尺寸箱(高度:10,),
容器(
颜色:颜色。深紫色,
身高:50,
孩子:排(
儿童:[
尺寸箱(宽度:20,),
扁平按钮(
子:图标(图标.摄像机),
已按下:(){
图像抓取(0);
},
),
尺寸标注框(宽度:120,),
扁平按钮(
子:图标(Icons.image),
已按下:(){
图像采集(1);
},
),
尺寸标注框(宽度:20)
],
),
),
//尺寸箱(高度:10,),
扩大(
子:容器(
宽度:double.infinity,
子项:_image==null?Text('image出现在此处'):image.file(_image),
颜色:Colors.greenAccent,
),
),
],
),
),
);
}
}
以下是UI图像:

现在我面临的两个问题是: 1.当我使用相机按钮显示相机图像时,相机UI打开,我捕获图像,按下复选按钮,UI继续加载,但图像不显示。 2.当我重新启动应用程序并重新运行它时,UI再次保持加载状态,即使我从头开始运行应用程序时按下gallery按钮,它也会在控制台中显示一条消息,说明:

I/颤振(14072):平台异常(已激活,图像选择器处于激活状态) 已激活,空)

请注意,只有在遇到我提到的第二种情况时才会发生这种情况。 此外,我在使用firebase的mlkit库时使用了版本号image_picker:^0.5.4+1,如果我使用image_picker的新版本,它会在大量消息中抛出一个巨大错误


请调查此事,并让我知道如何进一步处理此事。提前谢谢。

我解决了这个问题。 要确保的要点是:

  • 图像选择器的版本必须是最新更新的版本
  • 在做同样的事情时,可能会出现Android-X兼容性错误。这些错误如本节所述
  • 要解决问题2,您需要进行一些非常重要的更改,据我所知,您只能通过执行以下更改来完成此操作:

    第一步。转到android文件夹下的gradle.properties,添加以下代码:

    org.gradle.jvmargs=-Xmx1536M
    android.useAndroidX=true
    android.enableJetifier=true
    
    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
    }
    
    第二步。现在转到android下的build.gradle,而不是应用程序->build.gradle下的build.gradle。查看该文件时,请确保它以单词builscript开头(通过这种方式,您可以确保使用的是正确的build.gradle文件)

    第三步。Ctrl+A该文件中的所有内容,请注意,Ctrl+A删除所有内容并粘贴此代码所需的所有内容:

    org.gradle.jvmargs=-Xmx1536M
    android.useAndroidX=true
    android.enableJetifier=true
    
    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:\flatter.pub cache\hosted\pub.dartlang.org\cloud\u firestore-0.12.11\android\src\main\java\io\flatter\plugins\firebase\cloudfirestore\CloudFirestorePlugin.java 使用或重写不推荐使用的API。注意:使用 -Xlint:详细信息不推荐。注:C:\flatter.pub cache\hosted\pub.dartlang.org\cloud\u firestore-0.12.11\android\src\main\java\io\flatter\plugins\firebase\cloudfirestore\CloudFirestorePlugin.java 使用未经检查或不安全的操作。注意:使用 -Xlint:未选中以查看详细信息。错误:[标记]解析变量“${animal.sniffer.version}”失败注意: C:\flatter.pub cache\hosted\pub.dartlang.org\mlkit-0.15.0\android\src\main\java\com\azihsoyn\flatter\mlkit\MlkitPlugin.java使用未经检查或不安全的操作。注意:使用 -Xlint:未选中以查看详细信息

    轰!就这样。相信我,这一定会解决你的问题

    如果您仍在与任何此类问题作斗争,请尝试实施上述其他一些解决方案