Flutter增强现实功能插件ar_core的使用
Flutter增强现实功能插件ar_core的使用
ar_core
是一个用于移动设备的增强现实应用工具包,使创建增强现实应用变得简单。
感谢 Arslan Raza 的贡献,他的 ar_core
项目为本项目的开发提供了良好的基础和起点。
功能
- 在小部件中显示实时相机预览。
- 自定义相机位置,可以放置在屏幕上的任何位置。
- 选择资源文件、网络图片或PNG格式的3D对象。
- 可以拖动、缩放、旋转和放大缩小对象。
- 从Dart访问图像流。
开始使用
安装
首先,将 ar_core
包添加到您的项目中:
flutter pub add ar_core
或者手动将其添加到您的 pubspec.yaml
文件中(并运行 flutter pub get
):
dependencies:
ar_core: ^0.0.1
iOS
相机插件功能适用于 iOS 10.0 或更高版本。如果编译的版本低于 10.0,请确保在使用任何相机插件功能之前,通过程序检查设备上运行的 iOS 版本。例如,您可以使用 device_info_plus
插件来检查 iOS 版本。
在 ios/Runner/Info.plist
文件中添加两行:
- 一行带有键
Privacy - Camera Usage Description
和描述。 - 另一行带有键
Privacy - Microphone Usage Description
和描述。
或者直接在文本格式中添加键:
<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>
Android
在您的 android/app/build.gradle
文件中,将最小 Android SDK 版本更改为 21(或更高)。
minSdkVersion 21
需要注意的是,MediaRecorder
类在模拟器上无法正常工作,具体信息请参阅文档:https://developer.android.com/reference/android/media/MediaRecorder。特别是当启用声音录制视频时,在回放时会发现视频时长不正确,只看到第一帧。
导入
在您的代码中添加以下导入语句:
import 'package:ar_core/ar_core.dart';
使用或如何使用
替换您的 Scaffold
为 Augmented()
,它将处理所有视图。如果您想传递一张图片,只需在构造函数中传递该图片。
在 main
方法中写入以下代码:
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
List<CameraDescription> cameras = [];
Future<void> main() async {
try {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
} on CameraException catch (e) {
print(e.description);
}
runApp(const MyApp());
}
添加主类
class AugmentedReality extends StatefulWidget {
const AugmentedReality({Key? key}) : super(key: key);
[@override](/user/override)
_AugmentedRealityState createState() => _AugmentedRealityState();
}
class _AugmentedRealityState extends State<AugmentedReality> {
[@override](/user/override)
Widget build(BuildContext context) {
return Augmented(
/// 提供网络图片链接以添加您的对象
image: 'https://freepngimg.com/static/img/cat/hair.png'
);
}
}
完整示例
以下是完整的示例代码:
import 'package:ar_core/ar_core.dart';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
List<CameraDescription> cameras = [];
Future<void> main() async {
try {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
} on CameraException catch (e) {
print(e.description);
}
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Augmented Reality Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const AugmentedReality(),
);
}
}
class AugmentedReality extends StatefulWidget {
const AugmentedReality({Key? key}) : super(key: key);
[@override](/user/override)
_AugmentedRealityState createState() => _AugmentedRealityState();
}
class _AugmentedRealityState extends State<AugmentedReality> {
[@override](/user/override)
Widget build(BuildContext context) {
return Augmented(
image: 'https://freepngimg.com/static/img/cat/hair.png'
);
}
}
更多关于Flutter增强现实功能插件ar_core的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter增强现实功能插件ar_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现增强现实(AR)功能,可以使用 ar_flutter_plugin
插件,该插件是基于 Google 的 ARCore 和 Apple 的 ARKit 开发的。ar_flutter_plugin
提供了一套统一的 API,方便开发者在 Android 和 iOS 平台上实现 AR 功能。
以下是如何在 Flutter 项目中使用 ar_flutter_plugin
插件来实现增强现实功能的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 ar_flutter_plugin
插件的依赖:
dependencies:
flutter:
sdk: flutter
ar_flutter_plugin: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 配置 Android 和 iOS 项目
Android 配置
确保你的 AndroidManifest.xml
文件中包含以下元数据,以启用 ARCore 支持:
<application>
<meta-data
android:name="com.google.ar.core"
android:value="required" />
</application>
iOS 配置
在 Info.plist
文件中添加以下键值对,以启用 ARKit 支持:
<key>NSCameraUsageDescription</key>
<string>We need access to the camera to enable AR functionality.</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arkit</string>
</array>
3. 基本使用
导入插件
在你的 Dart 文件中导入 ar_flutter_plugin
:
import 'package:ar_flutter_plugin/ar_flutter_plugin.dart';
import 'package:ar_flutter_plugin/managers/ar_anchor_manager.dart';
import 'package:ar_flutter_plugin/managers/ar_location_manager.dart';
import 'package:ar_flutter_plugin/managers/ar_object_manager.dart';
import 'package:ar_flutter_plugin/managers/ar_session_manager.dart';
import 'package:ar_flutter_plugin/models/ar_anchor.dart';
import 'package:ar_flutter_plugin/models/ar_node.dart';
import 'package:flutter/material.dart';
创建 AR 视图
在 build
方法中创建 ARView
组件:
class ARScreen extends StatefulWidget {
[@override](/user/override)
_ARScreenState createState() => _ARScreenState();
}
class _ARScreenState extends State<ARScreen> {
ARSessionManager arSessionManager;
ARObjectManager arObjectManager;
[@override](/user/override)
void dispose() {
arSessionManager.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('AR Example'),
),
body: ARView(
onARViewCreated: _onARViewCreated,
),
);
}
void _onARViewCreated(ARSessionManager arSessionManager, ARObjectManager arObjectManager) {
this.arSessionManager = arSessionManager;
this.arObjectManager = arObjectManager;
this.arSessionManager.onInitialize(
showFeaturePoints: false,
showPlanes: true,
customPlaneTexturePath: "assets/images/transparent.png",
showWorldOrigin: true,
);
this.arObjectManager.onInitialize();
// Add an object to the scene
_addObject();
}
void _addObject() async {
var newNode = ARNode(
type: NodeType.localGLTF2,
uri: "assets/models/example.gltf",
scale: Vector3(0.2, 0.2, 0.2),
position: Vector3(0.0, 0.0, -1.0),
rotation: Vector4(1.0, 0.0, 0.0, 0.0),
);
await arObjectManager.addNode(newNode);
}
}