【发布时间】:2021-01-04 22:20:48
【问题描述】:
您好,我想构建使用 AR Core 的颤振应用程序。这是我在 Flutter 中的第一个应用程序和第一个移动应用程序。
我有来自 Flutter 的示例应用模板
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart';
import 'package:vector_math/vector_math_64.dart' as vector;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'AR Translator',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'AR Translator'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
...
}
我想在哪里添加按钮,用 AR Core 打开新窗口
ElevatedButton(
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => LiveTranslate()));
},
child: Text("Live translator"),
style: ElevatedButton.styleFrom(
minimumSize: Size(250, 35),
textStyle: TextStyle(
fontSize: 20,
)),
),
这个按钮在 Widged build() 中返回 Scaffold 在 body 中心子列中,其中是一个字段 children: <Widget>[..., ElevatedButton(), ...]。
我在这个tutorial上写了一个基本的小部件
class LiveTranslate extends StatefulWidget {
LiveTranslate({Key key, this.title}) : super(key: key);
final String title;
@override
_LiveTranslate createState() => _LiveTranslate();
}
class _LiveTranslate extends State<LiveTranslate> {
ArCoreController arCoreController;
_onArCoreViewCreated(ArCoreController _arcoreController) {
arCoreController = _arcoreController;
_addSphere(arCoreController);
}
_addSphere(ArCoreController _arCoreController) {
final material = ArCoreMaterial(color: Colors.deepOrange);
final sphere = ArCoreSphere(materials: [material], radius: 0.2);
final node = ArCoreNode(
shape: sphere,
position: vector.Vector3(0, 0, -1),
);
_arCoreController.addArCoreNode(node);
}
@override
void dispose() {
arCoreController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Live Translate"),
),
body: ArCoreView(
onArCoreViewCreated: _onArCoreViewCreated,
),
);
}
}
但是当我点击按钮时,我得到一个空白页面,我在调试控制台中有这个
Launching lib\main.dart on Android SDK built for x86 in debug mode...
lib\main.dart
√ Built build\app\outputs\flutter-apk\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:55289/Rq7xt3Irrow=/ws
D/EGL_emulation(10219): eglMakeCurrent: 0xe6d40600: ver 2 0 (tinfo 0xc7701200)
D/eglCodecCommon(10219): setVertexArrayObject: set vao to 0 (0) 1 0
E/EGL_emulation(10219): tid 10219: eglCreateContext(1478): error 0x3005 (EGL_BAD_CONFIG)
E/EGL_emulation(10219): tid 10219: eglGetConfigAttrib(1019): error 0x3005 (EGL_BAD_CONFIG)
I/chatty (10219): uid=10134(com.example.ar_translator) identical 3 lines
E/EGL_emulation(10219): tid 10219: eglGetConfigAttrib(1019): error 0x3005 (EGL_BAD_CONFIG)
E/EGL_emulation(10219): tid 10219: eglCreatePbufferSurface(1065): error 0x3005 (EGL_BAD_CONFIG)
I/Filament(10219): FEngine (32 bits) created at 0xbf481800 (threading is enabled)
D/Filament(10219): Using ASurfaceTexture
D/Filament(10219): FEngine resolved backend: OpenGL
D/HostConnection(10219): HostConnection::get() New Host Connection established 0xc790cb60, tid 10328
W/Gralloc3(10219): allocator 3.x is not supported
D/HostConnection(10219): HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_2
E/Filament(10219): eglChooseConfig failed with unknown
E/flutter (10219): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Couldn't create Engine
E/flutter (10219): at com.google.android.filament.Engine.create(Engine.java:67)
E/flutter (10219): at com.google.ar.sceneform.rendering.EngineInstance.createEngine(EngineInstance.java:85)
E/flutter (10219): at com.google.ar.sceneform.rendering.EngineInstance.getEngine(EngineInstance.java:39)
E/flutter (10219): at com.google.ar.sceneform.rendering.Renderer.initialize(Renderer.java:505)
E/flutter (10219): at com.google.ar.sceneform.rendering.Renderer.<init>(Renderer.java:106)
E/flutter (10219): at com.google.ar.sceneform.SceneView.initialize(SourceFile:78)
E/flutter (10219): at com.google.ar.sceneform.SceneView.<init>(SourceFile:10)
E/flutter (10219): at com.google.ar.sceneform.ArSceneView.<init>(SourceFile:1)
E/flutter (10219): at com.difrancescogianmarco.arcore_flutter_plugin.ArCoreView.<init>(ArCoreView.kt:53)
E/flutter (10219): at com.difrancescogianmarco.arcore_flutter_plugin.ArCoreViewFactory.create(ArCoreViewFactory.kt:30)
E/flutter (10219): at io.flutter.plugin.platform.SingleViewPresentation.onCreate(SingleViewPresentation.java:186)
E/flutter (10219): at android.app.Dialog.dispatchOnCreate(Dialog.java:421)
E/flutter (10219): at android.app.Dialog.show(Dialog.java:315)
E/flutter (10219): at android.app.Presentation.show(Presentation.java:250)
E/flutter (10219): at io.flutter.plugin.platform.VirtualDisplayController.<init>(VirtualDisplayController.java:95)
E/flutter (10219): at io.flutter.plugin.platform.VirtualDisplayController.create(VirtualDisplayController.java:48)
E/flutter (10219): at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:207)
E/flutter (10219): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:104)
E/flutter (10219): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59)
E/flutter (10219): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/flutter (10219): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter (10219): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/flutter (10219): at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (10219): at android.os.MessageQueue.next(MessageQueue.java:336)
E/flutter (10219): at android.os.Looper.loop(Looper.java:174)
E/flutter (10219): at android.app.ActivityThread.main(ActivityThread.java:7356)
E/flutter (10219): at java.lang.reflect.Method.invoke(Native Method)
E/flutter (10219): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/flutter (10219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
E/flutter (10219): , null, null)
[38;5;244mE/flutter (10219): #0 StandardMethodCodec.decodeEnvelope[39;49m
package:flutter/…/services/message_codecs.dart
[38;5;244mE/flutter (10219): #1 MethodChannel._invokeMethod[39;49m
package:flutter/…/services/platform_channel.dart
E/flutter (10219): <asynchronous suspension>
[38;5;244mE/flutter (10219): #2 MethodChannel.invokeMethod[39;49m
package:flutter/…/services/platform_channel.dart
[38;5;244mE/flutter (10219): #3 TextureAndroidViewController._sendCreateMessage[39;49m
package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #4 AndroidViewController.create[39;49m
package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #5 TextureAndroidViewController.create[39;49m
package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #6 TextureAndroidViewController.setSize[39;49m
package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #7 RenderAndroidView._sizePlatformView[39;49m
package:flutter/…/rendering/platform_view.dart
[38;5;244mE/flutter (10219): #8 RenderAndroidView.performResize[39;49m
package:flutter/…/rendering/platform_view.dart
[38;5;244mE/flutter (10219): #9 RenderObject.layout[39;49m
package:flutter/…/rendering/object.dart
[38;5;244mE/flutter (10219): #10 RenderProxyBoxMixin.performLayout[39;49m
package:flutter/…/rendering/proxy_box.dart
[38;5;244mE/flutter (10219): #11 RenderObject.layout[39;49m
package:flutter/…/rendering/object.dart
[38;5;244mE/flutter (10219): #12 MultiChildLayoutDelegate.layoutChild[39;49m
package:flutter/…/rendering/custom_layout.dart
[38;5;244mE/flutter (10219): #13 _ScaffoldLayout.performLayout[39;49m
package:flutter/…/material/scaffold.dart
[38;5;244mE/flutter (10219): #14 MultiChildLayoutDelegate._callPerformLayout[39;49m
package:flutter/…/rendering/custom_layout.dart
[38;5;244mE/flutter (10219): #15 RenderCustomMultiChildLayoutBox.performLayout[39;49m
package:flutter/…/rendering/custom_layout.dart
E/flutter (10219): #16 RenderObject.layout (pa
我哪里做错了? 我使用带有网络摄像头的安卓模拟器作为后置摄像头。
【问题讨论】:
-
我不认为你可以使用带有安卓模拟器和 ARCore 的网络摄像头。见:developers.google.com/ar/develop/c/emulator
标签: android flutter android-emulator arcore