Flutter增强现实功能插件ar_flutter_plugin_flutterflow的使用

Flutter增强现实功能插件ar_flutter_plugin_flutterflow的使用

简介

ar_flutter_plugin_flutterflowar_flutter_plugin 的一个直接改编版本,保留了其所有强大的功能和能力。这个分支创建的原因是原插件自2022年以来未更新。主要变化包括 AR Core 端点的更新、Gradle 升级以及与 FlutterFlow 的兼容性。

安装

  1. 通过命令行安装

    flutter pub add ar_flutter_plugin_flutterflow
    
  2. 手动添加到 pubspec.yaml 文件

    dependencies:
      ar_flutter_plugin_flutterflow: ^0.7.55
    

    然后运行:

    flutter pub get
    
  3. 在 FlutterFlow 中: 在你的 widget 的 pubspecs 依赖中简单添加:

    ar_flutter_plugin_flutterflow: ^0.7.55
    

导入

在你的 Dart 代码中添加以下导入语句:

import 'package:ar_flutter_plugin_flutterflow/ar_flutter_plugin.dart';

iOS 权限

为了防止应用在启动增强现实功能时崩溃,你需要在 Info.plist 文件(位于 ios/Runner)中添加以下权限:

<key>NSCameraUsageDescription</key>
<string>此应用程序需要相机访问以启用增强现实功能。</string>

如果你使用的是 FlutterFlow,可以在 “App Settings” > “Permissions” 中将 “Camera” 行的开关切换为 “On”,并添加描述:

此应用程序需要访问相机以启用增强现实功能。

如果你在 iOS 上遇到权限问题(例如,即使允许相机访问,相机视图仍然不显示),请在应用的 ios 目录下的 podfile 中添加以下内容:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',

        ## dart: PermissionGroup.camera
        'PERMISSION_CAMERA=1',

        ## dart: PermissionGroup.photos
        'PERMISSION_PHOTOS=1',

        ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
        'PERMISSION_LOCATION=1',

        ## dart: PermissionGroup.sensors
        'PERMISSION_SENSORS=1',

        ## dart: PermissionGroup.bluetooth
        'PERMISSION_BLUETOOTH=1',

        # 如果需要,添加其他权限组
      ]
    end
  end
end

在 FlutterFlow 中,目前无法在内部执行上述操作,因此需要将项目发布到 GitHub 并手动进行修改,然后从 GitHub 发布。

示例应用程序

以下是几个示例应用程序及其描述:

示例名称 描述
Debug Options 简单的 AR 场景,带有切换按钮以可视化世界原点、特征点和跟踪平面。
Local & Online Objects AR 场景,带有按钮可以放置来自 Flutter 资源文件夹的 GLTF 对象、来自互联网的 GLB 对象或来自应用文档目录的 GLB 对象,并可以修改已放置对象的缩放、位置和方向。
Objects & Anchors on Planes AR 场景,点击平面时会创建一个带有 3D 模型的锚点。
Object Transformation Gestures 与 Objects & Anchors on Planes 示例相同,但放置后的对象可以通过手势进行平移和旋转。
Screenshots 与 Objects & Anchors on Planes 示例相同,但使用快照功能拍摄 AR 场景的截图。
Cloud Anchors AR 场景,对象可以放置、上传和下载,从而创建可以在多个设备之间共享的交互式 AR 体验。当前示例允许上传最后一个放置的对象及其锚点,并下载半径 100 米内的所有锚点及其附带的对象。
External Object Management 类似于 Cloud Anchors 示例,但包含 UI 以选择不同的模型。使用外部数据库(Firestore)管理可用模型。

插件架构

以下是插件实现的架构概览: ar_plugin_architecture

完整示例 Demo

以下是一个完整的示例代码,展示了如何使用 ar_flutter_plugin_flutterflow 插件创建一个简单的 AR 应用程序,该应用程序可以在检测到的平面上放置 3D 模型。

import 'package:flutter/material.dart';
import 'package:ar_flutter_plugin_flutterflow/ar_flutter_plugin.dart';
import 'package:ar_flutter_plugin_flutterflow/models/ar_anchor.dart';
import 'package:ar_flutter_plugin_flutterflow/models/ar_node.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ARScreen(),
    );
  }
}

class ARScreen extends StatefulWidget {
  [@override](/user/override)
  _ARScreenState createState() => _ARScreenState();
}

class _ARScreenState extends State<ARSreen> {
  late ARController arController;
  bool isARViewCreated = false;
  List<ARNode> nodes = [];
  List<ARAnchor> anchors = [];

  void onARViewCreated(ARController controller) {
    arController = controller;
    arController.onPlaneDetected = () {
      setState(() {
        // 在检测到平面时执行操作
      });
    };
    arController.onTapPlane = (HitResult hitResult) async {
      final node = ARNode(
        type: NodeType.webGLB,
        uri: "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Duck/glTF-Binary/Duck.glb",
        position: hitResult.position,
        rotation: hitResult.rotation,
      );
      if (await arController.addARNodeWithAnchor(node)) {
        setState(() {
          nodes.add(node);
        });
      }
    };
  }

  [@override](/user/override)
  void dispose() {
    arController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AR Example'),
      ),
      body: Stack(
        children: [
          ARView(
            onARViewCreated: onARViewCreated,
          ),
          Align(
            alignment: Alignment.bottomCenter,
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: ElevatedButton(
                onPressed: () {
                  // 清除所有节点
                  for (var node in nodes) {
                    arController.removeARNode(node);
                  }
                  setState(() {
                    nodes.clear();
                  });
                },
                child: Text('清除所有模型'),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter增强现实功能插件ar_flutter_plugin_flutterflow的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter增强现实功能插件ar_flutter_plugin_flutterflow的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于如何在Flutter项目中使用ar_flutter_plugin_flutterflow插件来实现增强现实(AR)功能,以下是一个基本的代码示例。这个示例将展示如何集成该插件并进行基本的AR场景渲染。

首先,确保你已经在pubspec.yaml文件中添加了ar_flutter_plugin_flutterflow依赖:

dependencies:
  flutter:
    sdk: flutter
  ar_flutter_plugin_flutterflow: ^最新版本号  # 替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤来使用这个插件:

  1. 导入插件

在你的Dart文件中导入插件:

import 'package:ar_flutter_plugin_flutterflow/ar_flutter_plugin_flutterflow.dart';
  1. 初始化AR控制器

创建一个AR控制器实例,并设置必要的回调和配置。

class _MyHomePageState extends State<MyHomePage> {
  late ARFlutterPluginFlutterflowController _arController;

  @override
  void initState() {
    super.initState();
    // 初始化AR控制器
    _arController = ARFlutterPluginFlutterflowController(
      onPlaneDetected: _onPlaneDetected,
      onError: _onError,
    );

    // 启动AR会话
    _arController.startARSession();
  }

  @override
  void dispose() {
    // 停止AR会话并释放资源
    _arController.stopARSession();
    _arController.dispose();
    super.dispose();
  }

  void _onPlaneDetected(Plane plane) {
    // 当检测到平面时调用此方法
    print("Plane detected: ${plane.type}");
  }

  void _onError(String errorMessage) {
    // 当发生错误时调用此方法
    print("AR error: $errorMessage");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AR Flutter Example'),
      ),
      body: Stack(
        children: [
          // AR视图层
          ARFlutterPluginFlutterflow(
            controller: _arController,
          ),
          // 你可以在这里添加其他UI元素,如按钮、文本等
        ],
      ),
    );
  }
}
  1. 运行应用

确保你的设备或模拟器支持AR(通常需要后置摄像头和相应的ARCore或ARKit支持),然后运行你的Flutter应用。

注意

  • ARFlutterPluginFlutterflowController 的具体方法和属性可能会根据插件版本有所不同,请参考官方文档或插件的源代码以获取最新信息。
  • 示例中的 _onPlaneDetected_onError 回调方法用于处理平面检测和错误情况,你可以根据实际需求进行扩展。
  • 在真实项目中,你可能还需要处理权限请求(如相机权限),以及更复杂的UI布局和交互逻辑。

这个示例提供了一个基本的框架,展示了如何在Flutter中使用ar_flutter_plugin_flutterflow插件来实现AR功能。根据具体需求,你可以进一步自定义和扩展这个基础代码。

回到顶部