Flutter 360度全景图展示插件cloudimage_360_view的使用
Flutter 360度全景图展示插件cloudimage_360_view的使用
目录
示例
要构建和运行示例应用程序,请按照以下步骤操作:
- 如果您还没有Flutter,请从这里获取。
- 克隆此仓库。
- 进入仓库文件夹。
- 运行
flutter run-android
或flutter 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
更多关于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。width
和height
: 小部件的宽度和高度。这里使用double.infinity
是为了让图像填满可用空间。autoPlay
: 是否自动播放全景图。loop
: 是否循环播放。dragEnabled
: 是否允许用户通过拖动来查看全景图的不同部分。sensitivity
: 拖动的灵敏度。
运行应用
完成上述步骤后,你可以通过以下命令运行你的Flutter应用:
flutter run
如果一切顺利,你应该能够在你的设备上看到一个可以交互的360度全景图展示。
请确保你的360度图像URL是有效的,并且图像是正确格式的360度全景图。如果图像格式不正确或URL无效,插件可能无法正确显示全景图。