Flutter 360度全景图展示插件cloudimage_360_view的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter 360度全景图展示插件cloudimage_360_view的使用

目录

示例

要构建和运行示例应用程序,请按照以下步骤操作:

  1. 如果您还没有Flutter,请从这里获取。
  2. 克隆此仓库。
  3. 进入仓库文件夹。
  4. 运行flutter run-androidflutter run-ios以构建应用程序。

请注意,构建iOS应用程序需要配备XCode的Mac电脑。

示例代码

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Cloud Image 360 View',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const ExamplePage(),
    );
  }
}

class ExamplePage extends StatefulWidget {
  const ExamplePage({Key? key}) : super(key: key);

  @override
  State<ExamplePage> createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> {
  bool autoRotate = true;
  bool allowSwipe = true;
  int swipeSensitivity = 1;
  int rotationCount = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: SingleChildScrollView(
          padding: const EdgeInsets.all(8),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // UI组件(如图片、文本等)...
              
              _TileBuilder(
                headerTitle: 'Horizontal & Vertical (x&y) Axis Eaxmple',
                child: Ci360View(
                  xImageModel: Ci360ImageModel.horizontal(
                    imageFolder: 'https://scaleflex.cloudimg.io/v7/demo/360-nike/',
                    imageName: (index) => 'nike-$index.jpg',
                    imagesLength: 35,
                  ),
                  yImageModel: Ci360ImageModel.vertical(
                    imageFolder: 'https://scaleflex.cloudimg.io/v7/demo/360-nike/',
                    imageName: (index) => 'nike-y-$index.jpg',
                    imagesLength: 36,
                  ),
                  options: Ci360Options(
                    swipeSensitivity: swipeSensitivity,
                    autoRotate: autoRotate,
                    rotationCount: rotationCount,
                    allowSwipeToRotate: allowSwipe,
                    onImageChanged: (index, reason, axis) {},
                  ),
                ),
              ),
              
              _TileBuilder(
                headerTitle: 'Horizontal(x) Axis Only Eaxmple',
                child: Ci360View(
                  xImageModel: Ci360ImageModel.horizontal(
                    imageFolder: 'https://scaleflex.cloudimg.io/v7/demo/earbuds/',
                    imageName: (index) => '$index.jpg',
                    imagesLength: 233,
                  ),
                  options: Ci360Options(
                    swipeSensitivity: swipeSensitivity,
                    autoRotate: autoRotate,
                    rotationCount: rotationCount,
                    allowSwipeToRotate: allowSwipe,
                    onImageChanged: (index, reason, axis) {},
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class _TileBuilder extends StatelessWidget {
  const _TileBuilder({
    required this.headerTitle,
    required this.child,
    Key? key,
  }) : super(key: key);

  final String headerTitle;
  final Widget child;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8),
      child: Column(
        children: [
          Text(
            headerTitle,
            style: Theme.of(context).textTheme.bodyLarge,
          ),
          SizedBox(height: 8), // smallVerticalSpacer
          child,
        ],
      ),
    );
  }
}

安装

在您的pubspec.yaml中添加依赖项:

dependencies:
  cloudimage_360_view: 1.0.3

然后导入包:

import 'package:cloudimage_360_view/cloudimage_360_view.dart';

如何使用

创建一个Ci360View小部件,并传递必要的参数:

Ci360View(
    xImageModel: Ci360ImageModel.horizontal(
        imageFolder: 'your image x folder - check Ci360ImageModel',
        imageName: (index) => '$index.jpg',
        imagesLength: 233,
    ),
    yImageModel: Ci360ImageModel.vertical(
        imageFolder: 'your image y folder - check Ci360ImageModel',
        imageName: (index) => 'imagename-y-$index.jpg',
        imagesLength: 36,
    ),
    options: Ci360Options(
        swipeSensitivity: 2,
        autoRotate: true,
        rotationCount: 5,
        allowSwipeToRotate: true,
        onImageChanged: (index, reason, axis) {},
    ),
)

图像模型

水平(X轴)

Ci360ImageModel.horizontal({
    required this.imageFolder,
    required this.imageName,
    required this.imagesLength,
});

垂直(Y轴)

Ci360ImageModel.vertical({
    required this.imageFolder,
    required this.imageName,
    required this.imagesLength,
});

参数说明

  • imageFolder: 必填,String类型。你的图片存储路径。
  • imageName: 必填,Function类型。返回图片名称的函数。
  • imagesLength: 必填,int类型。指定轴上的图片数量。

选项

Ci360Options({
    this.autoRotate = false,
    this.allowSwipeToRotate = true,
    this.rotationCount = 1,
    this.swipeSensitivity = 3,
    this.frameChangeDuration = kShortDuration,
    this.rotationDirection = CIRotationDirection.clockwise,
    this.onImageChanged,
});

控制器

可以自定义控制器类来实现特定功能。例如:

class CustomCi360Controller implements Ci360Controller {
  @override
  Completer readyCompleter = Completer();

  Ci360State? _state;

  @override
  set state(Ci360State? state) {
    _state = state;
    if (!readyCompleter.isCompleted) {
      readyCompleter.complete();
    }
  }

  // 实现所需的方法与自定义回调
}

最佳实践

为了使用cloudimage 360 view,您的原始(主)图片应该存储在可以通过HTTP或HTTPS访问的服务器或存储桶(如S3、Google Cloud、Azure Blob等)上。

贡献

所有贡献都非常欢迎!

许可证

Flutter Cloudimage 360 View是根据MIT许可证提供的。


更多关于Flutter 360度全景图展示插件cloudimage_360_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter 360度全景图展示插件cloudimage_360_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用cloudimage_360_view插件来展示360度全景图的示例代码。这个插件允许你轻松地在Flutter应用中嵌入和展示360度全景图像。

首先,确保你的Flutter环境已经正确设置,并且你有一个Flutter项目。如果还没有,你可以通过以下命令创建一个新的Flutter项目:

flutter create my_360_viewer_app
cd my_360_viewer_app

第一步:添加依赖

在你的pubspec.yaml文件中添加cloudimage_360_view依赖:

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

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

第二步:导入插件

在你的主Dart文件(通常是lib/main.dart)中导入插件:

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

第三步:使用插件

接下来,你可以在你的Flutter应用中使用Cloudimage360View小部件来展示360度全景图。以下是一个完整的示例代码:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '360 Degree Viewer',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('360 Degree Viewer'),
        ),
        body: Center(
          child: Cloudimage360View(
            imageUrl: 'https://example.com/your-360-image.jpg',  // 替换为你的360度图像URL
            width: double.infinity,
            height: double.infinity,
            autoPlay: true,  // 自动播放
            loop: true,  // 循环播放
            dragEnabled: true,  // 允许拖动
            sensitivity: 1.0,  // 拖动灵敏度
          ),
        ),
      ),
    );
  }
}

参数说明

  • imageUrl: 360度全景图像的URL。
  • widthheight: 小部件的宽度和高度。这里使用double.infinity是为了让图像填满可用空间。
  • autoPlay: 是否自动播放全景图。
  • loop: 是否循环播放。
  • dragEnabled: 是否允许用户通过拖动来查看全景图的不同部分。
  • sensitivity: 拖动的灵敏度。

运行应用

完成上述步骤后,你可以通过以下命令运行你的Flutter应用:

flutter run

如果一切顺利,你应该能够在你的设备上看到一个可以交互的360度全景图展示。

请确保你的360度图像URL是有效的,并且图像是正确格式的360度全景图。如果图像格式不正确或URL无效,插件可能无法正确显示全景图。

回到顶部