Flutter 360度全景图片展示插件imageview360的使用
Flutter 360度全景图片展示插件imageview360的使用
imageview360
imageview360
是一个Flutter包,它提供了带有旋转和手势自定义功能的图像360度视图。
支持的Dart版本
- Dart SDK version >= 2.12.0
Demo Gif
安装
在pubspec.yaml
文件中添加依赖:
dependencies:
imageview360: ^1.3.0
使用方法
导入包
在你的Dart文件中导入包:
import 'package:imageview360/imageview360.dart';
基本用法
ImageView360(
key: UniqueKey(),
imageList: imageList,
),
注意:为了使
ImageView360
在热重载时显示即时变化,你需要提供UniqueKey()
,以便每次重建小部件。
可定制用法
ImageView360(
key: UniqueKey(),
imageList: imageList,
autoRotate: true, //可选
rotationCount: 2, //可选
rotationDirection: RotationDirection.anticlockwise, //可选
frameChangeDuration: Duration(milliseconds: 50), //可选
swipeSensitivity: 2, //可选
allowSwipeToRotate: true, //可选
onImageIndexChanged: (currentImageIndex) { //可选
print("currentImageIndex: $currentImageIndex");
},
)
示例代码:从资源加载并预缓存图片
List<ImageProvider> imageList = List<ImageProvider>();
for (int i = 1; i <= 52; i++) {
imageList.add(AssetImage('assets/sample/$i.png'));
// 预缓存图片以加快加载速度
await precacheImage(AssetImage('assets/sample/$i.png'), context);
}
必填字段
属性 | 类型 | 用途 |
---|---|---|
imageList | List | 要显示的图片列表 |
可选字段
属性 | 类型 | 默认值 |
---|---|---|
autoRotate | bool | false |
rotationCount | int | 1 |
rotationDirection | RotationDirection | RotationDirection.clockwise |
frameChangeDuration | Duration | Duration(milliseconds: 80) |
swipeSensitivity | int | 1 (范围:1-5,小于1视为1,大于5视为5) |
allowSwipeToRotate | bool | true |
onImageIndexChanged | Function(int) | (currentImageIndex){} |
示例项目代码
以下是完整的示例项目代码,展示了如何使用imageview360
插件:
import 'package:flutter/material.dart';
import 'package:imageview360/imageview360.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'ImageView360 Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DemoPage(title: 'ImageView360 Demo'),
);
}
}
class DemoPage extends StatefulWidget {
DemoPage({Key key, this.title}) : super(key: key);
final String title;
@override
_DemoPageState createState() => _DemoPageState();
}
class _DemoPageState extends State<DemoPage> {
List<ImageProvider> imageList = <ImageProvider>[];
bool autoRotate = true;
int rotationCount = 2;
int swipeSensitivity = 2;
bool allowSwipeToRotate = true;
RotationDirection rotationDirection = RotationDirection.anticlockwise;
Duration frameChangeDuration = Duration(milliseconds: 50);
bool imagePrecached = false;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) => updateImageList(context));
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: SingleChildScrollView(
child: Center(
child: Padding(
padding: const EdgeInsets.only(top: 72.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
(imagePrecached == true)
? ImageView360(
key: UniqueKey(),
imageList: imageList,
autoRotate: autoRotate,
rotationCount: rotationCount,
rotationDirection: RotationDirection.anticlockwise,
frameChangeDuration: Duration(milliseconds: 30),
swipeSensitivity: swipeSensitivity,
allowSwipeToRotate: allowSwipeToRotate,
onImageIndexChanged: (currentImageIndex) {
print("currentImageIndex: $currentImageIndex");
},
)
: Text("Pre-Caching images..."),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Optional features:",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.green,
fontSize: 24),
),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text("Auto rotate: $autoRotate"),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text("Rotation count: $rotationCount"),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text("Rotation direction: $rotationDirection"),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text(
"Frame change duration: ${frameChangeDuration.inMilliseconds} milliseconds"),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text("Allow swipe to rotate image: $allowSwipeToRotate"),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text("Swipe sensitivity: $swipeSensitivity"),
),
],
),
),
),
),
);
}
void updateImageList(BuildContext context) async {
for (int i = 1; i <= 52; i++) {
imageList.add(AssetImage('assets/sample/$i.png'));
await precacheImage(AssetImage('assets/sample/$i.png'), context);
}
setState(() {
imagePrecached = true;
});
}
}
通过上述代码,你可以创建一个简单的Flutter应用程序,该应用程序使用imageview360
插件来展示360度全景图片,并且可以对旋转和手势进行自定义。希望这些信息对你有所帮助!
更多关于Flutter 360度全景图片展示插件imageview360的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter 360度全景图片展示插件imageview360的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现360度全景图片展示,你可以使用imageview360
这个插件。以下是一个使用imageview360
插件的基本代码示例,展示了如何集成和展示360度全景图片。
首先,你需要在pubspec.yaml
文件中添加imageview360
插件的依赖:
dependencies:
flutter:
sdk: flutter
imageview360: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目的Dart文件中(例如main.dart
),你可以按照以下代码示例来实现360度全景图片展示:
import 'package:flutter/material.dart';
import 'package:imageview360/imageview360.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter 360度全景图片展示',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('360度全景图片展示'),
),
body: Center(
child: ImageView360(
imageSource: 'assets/your_360_image.jpg', // 请替换为你的360度全景图片路径
width: double.infinity,
height: double.infinity,
minFlingVelocity: 100.0,
maxFlingVelocity: 1000.0,
initialAngle: 0.0,
imageScale: 1.0,
autoRotate: false, // 是否自动旋转
autoRotateInterval: 3000, // 自动旋转间隔,单位为毫秒
autoRotateSpeed: 30, // 自动旋转速度,单位为度/秒
),
),
),
);
}
}
注意:
- 你需要将你的360度全景图片放置在
assets
文件夹中,并在pubspec.yaml
中添加相应的资源声明:
flutter:
assets:
- assets/your_360_image.jpg # 请替换为你的360度全景图片路径
-
确保图片格式和大小适合360度全景展示。
-
ImageView360
的构造函数中有很多参数可以配置,比如imageSource
(图片路径)、width
和height
(控件的宽度和高度)、minFlingVelocity
和maxFlingVelocity
(最小和最大滑动速度)、initialAngle
(初始角度)、imageScale
(图片缩放比例)、autoRotate
(是否自动旋转)、autoRotateInterval
(自动旋转间隔)和autoRotateSpeed
(自动旋转速度)等。你可以根据需要调整这些参数。
这个示例代码展示了如何在Flutter应用中集成imageview360
插件来实现360度全景图片展示。你可以根据自己的需求进一步定制和扩展这个示例。