Flutter页面转换效果插件another_transformer_page_view的使用
Flutter页面转换效果插件another_transformer_page_view的使用
another_transformer_page_view
是一个用于Flutter的插件,提供了一系列丰富的页面切换动画效果。它继承自 transformer_page_view
,并在此基础上进行了优化和扩展。
Very simple to use
要使用此插件非常简单,只需在 pubspec.yaml
文件中添加依赖:
dependencies:
another_transformer_page_view: ^latest_version # 替换为最新版本号
然后运行以下命令来获取包:
flutter packages get
接下来就可以在代码中使用 TransformerPageView
组件了。例如:
import 'package:another_transformer_page_view/another_transformer_page_view.dart';
...
new TransformerPageView(
loop: true,
transformer: new AccordionTransformer(),
itemBuilder: (BuildContext context, int index) {
return new Container(
color: list[index % list.length],
child: new Center(
child: new Text(
"$index",
style: new TextStyle(fontSize: 80.0, color: Colors.white),
),
),
);
},
itemCount: 3,
);
几乎与 PageView.builder
的用法相同,只需要指定一个 transformer
参数给 TransformerPageView
,该参数是一个 PageTransformer
的子类。
Show cases
以下是几种常见的页面转换效果示例:
- Parallax:
- Basic(如AccordionTransformer):
- ThreeDTransformer:
- ScaleAndFadeTransformer:
- ZoomInPageTransformer:
- ZoomOutPageTransformer:
- DepthPageTransformer:
每个效果的具体实现可以参考相应的GitHub链接。
Getting Started
Installation
- 在项目的
pubspec.yaml
文件中添加依赖:dependencies: another_transformer_page_view: ^latest_version # 替换为最新版本号
- 运行命令以获取包:
flutter packages get
Basic Usage
TransformerPageView
的基本参数如下表所示:
Parameter | Default | Description |
---|---|---|
scrollDirection | Axis.horizontal | 如果是 Axis.horizontal ,则子项水平排列;否则垂直排列。 |
loop | false | 设置为 true 可启用无限循环模式。 |
index | none | 初始显示的页索引。如果不设置,则由组件自身控制;否则由外部控件通过 itemBuilder 控制。 |
onPageChanged | void onPageChanged(int) | 当用户滑动时调用,传递新的索引值。 |
duration | Duration(milliseconds:300) | 每次切换动画持续的时间。 |
transformer | none | 最重要的属性,返回基于传入组件变换后的组件。如果为 null ,必须指定 itemBuilder 。 |
itemCount | none | 总项目数。 |
itemBuilder | none | 根据索引返回组件的函数。如果为 null ,必须指定 transformer 。 |
Build-in Parallax
提供了三种内置的视差效果处理方式:
- ParallaxColor:处理颜色渐变。
- ParallaxImage:处理图片,速度比
PageView
慢。 - ParallaxContainer:处理文本或其他元素,速度比
PageView
快。
这些视差效果都可以在 PageTransformer
的子类中组合使用,创建出酷炫的效果。
Custom animation
除了内置的转换效果外,还可以自定义动画。可以通过继承 PageTransformer
类来自定义所需的页面切换效果。
示例代码
这里给出一个完整的示例代码,展示了如何在一个简单的Flutter应用中集成 TransformerPageView
,并且能够动态选择不同的页面转换效果:
import 'dart:math' as math;
import 'package:another_transformer_page_view/another_transformer_page_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(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
IndexController? _controller;
final List<String> _types = [
'AccordionTransformer',
'ThreeDTransformer',
'ScaleAndFadeTransformer',
'ZoomInPageTransformer',
'ZoomOutPageTransformer',
'DeepthPageTransformer'
];
String? _type = 'AccordionTransformer';
FixedExtentScrollController? controller;
int? _index = 0;
double _viewportFraction = 1.0;
@override
void initState() {
_controller = IndexController();
controller = FixedExtentScrollController();
super.initState();
}
PageTransformer getTransformer() {
switch (_type) {
case 'AccordionTransformer':
return AccordionTransformer();
case 'ThreeDTransformer':
return ThreeDTransformer();
case 'ScaleAndFadeTransformer':
return ScaleAndFadeTransformer();
case 'ZoomInPageTransformer':
return ZoomInPageTransformer();
case 'ZoomOutPageTransformer':
return ZoomOutPageTransformer();
case 'DeepthPageTransformer':
return DepthPageTransformer();
default:
throw Exception('Not a type');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title!),
),
body: Column(
children: <Widget>[
Wrap(
children: <Widget>[
ElevatedButton(
onPressed: () {
_controller!.move(math.Random().nextInt(5));
},
child: const Text('Random'),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (b) {
return Scaffold(
appBar: AppBar(
title: const Text('images'),
),
body: ImageTest(),
);
},
),
);
},
child: const Text('Image'),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (b) {
return Scaffold(
appBar: AppBar(
title: const Text('welcome'),
),
body: Welcome(0),
);
},
),
);
},
child: const Text('Welcome'),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (b) {
return const Zero();
},
),
);
},
child: const Text('Zero'),
),
],
),
Row(
children: <Widget>[
ElevatedButton(
onPressed: () {
_controller!.previous();
},
child: const Text('Previous'),
),
const SizedBox(width: 8.0),
ElevatedButton(
onPressed: () {
_controller!.next();
},
child: const Text('Next'),
),
const SizedBox(width: 8.0),
ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (_) {
return CupertinoPicker(
scrollController: controller,
itemExtent: 30.0,
onSelectedItemChanged: (int index) {
setState(() {
controller = FixedExtentScrollController(initialItem: index);
_type = _types[index];
if (_type == 'ScaleAndFadeTransformer') {
_viewportFraction = 0.8;
} else {
_viewportFraction = 1.0;
}
});
},
children: _types.map((t) => Text(t)).toList(),
);
},
);
},
child: const Text('Change Animation'),
),
],
),
Expanded(
child: TransformerPageView(
index: _index,
viewportFraction: _viewportFraction,
controller: _controller,
transformer: getTransformer(),
onPageChanged: (int? index) {
setState(() {
_index = index;
});
},
itemBuilder: (BuildContext context, int index) {
// 注意这里的 images 需要在实际项目中替换为自己的资源路径
return Image.asset(
'assets/image_$index.jpg', // 假设你有三张图片命名为 image_0.jpg, image_1.jpg, image_2.jpg
fit: BoxFit.fill,
);
},
itemCount: 3,
),
)
],
),
);
}
}
这段代码创建了一个包含多种页面切换效果的应用程序,并允许用户通过底部弹出的选择器来改变当前使用的动画类型。同时,还提供了前后翻页按钮以及随机跳转的功能。
希望这篇文档能帮助您更好地理解和使用 another_transformer_page_view
插件!如果有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter页面转换效果插件another_transformer_page_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter页面转换效果插件another_transformer_page_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用another_transformer_page_view
插件来实现页面转换效果的示例代码。another_transformer_page_view
插件提供了多种页面转换动画,可以使你的应用更加生动和有趣。
首先,确保你已经在pubspec.yaml
文件中添加了another_transformer_page_view
依赖:
dependencies:
flutter:
sdk: flutter
another_transformer_page_view: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来是一个完整的示例代码,展示了如何使用another_transformer_page_view
:
import 'package:flutter/material.dart';
import 'package:another_transformer_page_view/another_transformer_page_view.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Another Transformer Page View Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<Color> colors = [Colors.red, Colors.green, Colors.blue, Colors.yellow];
int currentPage = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Another Transformer Page View Demo'),
),
body: Center(
child: AnotherTransformerPageView(
pageTransformer: CubePageTransformer(), // 你可以使用其他Transformer,比如 DepthPageTransformer, ZoomPageTransformer 等
controller: PageController(initialPage: currentPage),
onPageChanged: (int page) {
setState(() {
currentPage = page;
});
},
children: List.generate(
colors.length,
(index) => Container(
color: colors[index],
child: Center(
child: Text(
'Page ${index + 1}',
style: TextStyle(color: Colors.white, fontSize: 24),
),
),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
final PageController controller = PageController.of(context);
controller.nextPage(
duration: const Duration(milliseconds: 500),
curve: Curves.easeInOut,
);
},
tooltip: 'Next Page',
child: Icon(Icons.navigate_next),
),
);
}
}
在这个示例中:
- 我们定义了一个包含几种颜色的列表,每个颜色代表一个页面。
- 使用
AnotherTransformerPageView
来创建页面视图,并设置pageTransformer
属性为CubePageTransformer
(你可以根据需要更改为其他转换效果,如DepthPageTransformer
或ZoomPageTransformer
)。 PageController
用于控制页面切换,并在页面改变时更新当前页面索引。- 每个页面都是一个带有中心文本的容器,文本显示当前页面的编号。
- 一个浮动操作按钮(FAB)用于切换到下一个页面。
这个示例展示了如何使用another_transformer_page_view
插件实现页面转换效果,你可以根据需要进一步自定义和扩展。