Flutter 3D模型展示插件model_viewer的使用

简介

这是一个用于在Flutter应用程序中渲染交互式3D模型的插件。它支持glTFGLB格式的模型文件,并通过嵌入Google的<model-viewer> Web组件来实现。

项目信息

  • 许可证: 公共领域 (Unlicense)
  • Dart版本: 2.8+
  • Flutter版本: 1.17+
  • 平台: Android 和 iOS

前置条件

  • Dart: 2.8+
  • Flutter: 1.17+

兼容性

  • Android: 需要近期系统浏览器版本。
  • iOS: 需要近期系统浏览器版本。

安装

pubspec.yaml

在项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  model_viewer: ^0.8.1

AndroidManifest.xml (仅限Android 9+)

在Android 9及以上设备上使用此插件时,需要配置AndroidManifest.xml以允许明文流量:

--- a/example/android/app/src/main/AndroidManifest.xml
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -8,7 +8,8 @@
     &lt;application
         android:name="io.flutter.app.FlutterApplication"
         android:label="model_viewer_example"
-        android:icon="@mipmap/ic_launcher"&gt;
+        android:icon="@mipmap/ic_launcher"
+        android:usesCleartextTraffic="true"&gt;
         &lt;activity
             android:name=".MainActivity"
             android:launchMode="singleTop"

Info.plist (仅限iOS)

在iOS上使用此插件时,需要启用嵌入视图预览功能:

&lt;key&gt;io.flutter.embedded_views_preview&lt;/key&gt;
&lt;true/&gt;

特性

  • 支持glTFGLB格式的模型文件。
  • 支持动画模型,可配置自动播放。
  • 可选地支持将模型加载到增强现实(AR)查看器中。
  • 可配置模型的背景颜色。
  • 可配置模型是否自动旋转。

示例代码

导入库

import 'package:model_viewer/model_viewer.dart';

创建ModelViewer小部件

以下是一个简单的示例,展示如何在Flutter应用程序中使用ModelViewer小部件:

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Model Viewer")),
        body: ModelViewer(
          // 背景颜色
          backgroundColor: Color.fromARGB(0xFF, 0xEE, 0xEE, 0xEE),
          // 模型路径(本地资源)
          src: 'etc/assets/Astronaut.glb',
          // 替代文本
          alt: "A 3D model of an astronaut",
          // 启用AR模式
          ar: true,
          // 自动旋转
          autoRotate: true,
          // 启用相机控制
          cameraControls: true,
        ),
      ),
    );
  }
}

加载捆绑的Flutter资源

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Model Viewer")),
        body: ModelViewer(
          src: 'assets/MyModel.glb',
          alt: "A 3D model of an object",
        ),
      ),
    );
  }
}

从文件系统加载模型

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Model Viewer")),
        body: ModelViewer(
          src: 'file:///path/to/MyModel.glb',
          alt: "A 3D model of an object",
        ),
      ),
    );
  }
}

从网络加载模型

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Model Viewer")),
        body: ModelViewer(
          src: 'https://modelviewer.dev/shared-assets/models/Astronaut.glb',
          alt: "A 3D model of an astronaut",
        ),
      ),
    );
  }
}

更多关于Flutter 3D模型展示插件model_viewer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter 3D模型展示插件model_viewer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


model_viewer 是一个用于在 Flutter 应用中展示 3D 模型的插件。它基于 Google 的 <model-viewer> Web 组件,支持在 Flutter 应用中嵌入和交互式查看 3D 模型。以下是如何在 Flutter 项目中使用 model_viewer 插件的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 model_viewer 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  model_viewer: ^0.10.0  # 请检查最新版本

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

2. 导入插件

在需要使用 model_viewer 的 Dart 文件中导入插件:

import 'package:model_viewer/model_viewer.dart';

3. 使用 ModelViewer 组件

ModelViewermodel_viewer 插件提供的主要组件,用于展示 3D 模型。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:model_viewer/model_viewer.dart';

class ModelViewerExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('3D Model Viewer'),
      ),
      body: ModelViewer(
        src: 'assets/models/Astronaut.glb',  // 3D 模型文件路径
        alt: 'A 3D model of an astronaut',
        ar: true,  // 启用 AR 功能
        autoRotate: true,  // 自动旋转
        cameraControls: true,  // 启用相机控制
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: ModelViewerExample(),
));

4. 添加 3D 模型文件

将你的 3D 模型文件(如 .glb.gltf 格式)放置在 assets 文件夹中,并在 pubspec.yaml 中声明:

flutter:
  assets:
    - assets/models/Astronaut.glb

5. 运行应用

现在你可以运行你的 Flutter 应用,并查看嵌入的 3D 模型。ModelViewer 组件支持多种交互功能,如旋转、缩放、平移等。

6. 配置选项

ModelViewer 组件提供了多种配置选项,以下是一些常用的选项:

  • src: 3D 模型文件的路径。
  • alt: 模型的替代文本。
  • ar: 是否启用 AR 功能。
  • autoRotate: 是否自动旋转模型。
  • cameraControls: 是否启用相机控制。
  • backgroundColor: 背景颜色。
  • iosSrc: iOS 设备上使用的模型文件路径。
  • androidSrc: Android 设备上使用的模型文件路径。

7. 支持的文件格式

model_viewer 支持以下 3D 模型文件格式:

  • .glb (Binary GLTF)
  • .gltf (GLTF)

8. 注意事项

  • model_viewer 依赖于 Web 技术,因此在某些平台上(如 iOS 和 Android)可能需要额外的配置。
  • 确保你的 3D 模型文件大小适中,以避免性能问题。

9. 示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 model_viewer 插件:

import 'package:flutter/material.dart';
import 'package:model_viewer/model_viewer.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('3D Model Viewer'),
        ),
        body: ModelViewer(
          src: 'assets/models/Astronaut.glb',
          alt: 'A 3D model of an astronaut',
          ar: true,
          autoRotate: true,
          cameraControls: true,
        ),
      ),
    );
  }
}
回到顶部