Flutter快速覆盖层插件lightning_overlay的使用
Flutter快速覆盖层插件lightning_overlay的使用
Lightning Overlay
Lightning Overlay 是一个用于任何 Widget 的快速覆盖层插件。它可以在你的任意 Widget 上创建一个漂亮的覆盖效果。
注意事项
- 如果你希望使用自动启动功能,需要设置
delayDuration
。同时还需要设置pauseDuration
来控制反向动画。如果反向动画没有开始,你需要增加pauseDuration
。 - 如果你希望使用重复模式,需要设置较高的
pauseRepeatDelay
(默认为 2 秒),因为当动画完成时,pauseRepeatDelay
将被触发并重新播放动画。
模式
它支持以下几种模式:
- 自动启动延迟
- 受控于 Lightning 控制器
- 手势控制
- 重复模式
同时,它还支持以下方向:
- 左上角到右下角
- 右下角到左上角
API
以下是 Lightning Overlay 的 API 说明表:
属性 | 描述 | 必填 | 可选 |
---|---|---|---|
maxValue | 根据子 Widget 的大小选择较大的数字。例如,宽度为 200,高度为 300 时,选择 300。 | 是 | 否 |
child | 传递你的子 Widget。 | 是 | 否 |
delayDuration | 当传递 delayDuration 时,动画将在延迟后自动启动。 |
否 | 是 |
useGesture | 决定用户是否可以通过点击来启动动画,当点击结束时动画完成。 | 否 | 否 |
borderRadius | 如果子 Widget 使用了圆角边框,请将半径传递给 Lightning Widget 以在动画期间隐藏边缘。 | 否 | 否 |
controller | 触发动画(例如,当点击按钮时)。 | 否 | 是 |
overlayColor | 设置覆盖层的颜色。 | 否 | 否 |
pauseDuration | 在点击或触发动画时,可以设置暂停时间,从完全覆盖子 Widget 到开始揭示子 Widget 的时间。 | 否 | 否 |
durationIn | 覆盖动画的持续时间。 | 否 | 否 |
durationOut | 揭示动画的持续时间。 | 否 | 否 |
curveIn | 覆盖动画的曲线。 | 否 | 否 |
curveOut | 揭示动画的曲线。 | 否 | 否 |
direction | 动画的方向,从左上到右下或反之。 | 否 | 否 |
控制器
创建一个控制器并传递给 Lightning Widget:
LightningController controller = LightningController();
注意:由于 animateIn
需要完成覆盖动画,所以在调用 animateOut
之前需要等待。
函数 | 描述 |
---|---|
animateIn | 触发覆盖动画 |
animateOut | 触发揭示动画 |
示例代码
下面是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:lightning_overlay/lightning_overlay.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const LightningCard(),
);
}
}
class LightningCard extends StatefulWidget {
const LightningCard({super.key});
[@override](/user/override)
LightningCardState createState() => LightningCardState();
}
class LightningCardState extends State<LightningCard> {
LightningController controller = LightningController();
void animate() async {
controller.animateIn();
await Future.delayed(const Duration(milliseconds: 500));
controller.animateOut();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Lightning(
useGesture: false,
maxValue: 600,
borderRadius: 15,
repeat: true,
delayDuration: const Duration(milliseconds: 300),
controller: controller,
direction: LightningDirection.leftToRight,
pauseDuration: const Duration(milliseconds: 200),
durationIn: const Duration(milliseconds: 300),
durationOut: const Duration(milliseconds: 450),
overlayColor: Colors.white.withOpacity(0.1),
child: Container(
height: 300,
width: 300,
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(15),
),
child: Center(
child: Image.network(
"https://storage.googleapis.com/cms-storage-bucket/0dbfcc7a59cd1cf16282.png",
width: 200,
),
),
),
),
),
const SizedBox(
height: 100,
),
GestureDetector(
onTap: () => animate(),
child: Container(
height: 70,
width: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.blue,
),
child: const Center(
child: Text(
"Animate",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w700,
fontSize: 20,
),
),
),
),
)
],
),
);
}
[@override](/user/override)
void dispose() {
super.dispose();
}
}
更多关于Flutter快速覆盖层插件lightning_overlay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter快速覆盖层插件lightning_overlay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 lightning_overlay
插件在 Flutter 中实现快速覆盖层的示例代码。lightning_overlay
是一个用于在 Flutter 应用中快速显示覆盖层的插件,非常适合用于显示加载指示器、对话框或自定义覆盖视图。
首先,你需要在 pubspec.yaml
文件中添加 lightning_overlay
依赖:
dependencies:
flutter:
sdk: flutter
lightning_overlay: ^最新版本号 # 请替换为实际的最新版本号
然后运行 flutter pub get
以安装依赖。
接下来是一个完整的示例代码,展示如何使用 lightning_overlay
来显示一个简单的加载指示器覆盖层:
import 'package:flutter/material.dart';
import 'package:lightning_overlay/lightning_overlay.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Lightning Overlay Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 显示加载指示器覆盖层
LightningOverlay.show(
context,
widget: Center(
child: CircularProgressIndicator(),
),
);
// 模拟异步操作,例如网络请求
Future.delayed(Duration(seconds: 2), () {
// 隐藏覆盖层
LightningOverlay.hide(context);
});
},
child: Text('Show Overlay'),
),
),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个按钮。当按钮被点击时,将显示一个带有 CircularProgressIndicator
的加载指示器覆盖层。我们使用 Future.delayed
来模拟一个异步操作(例如网络请求),然后在 2 秒后隐藏覆盖层。
自定义覆盖层
你也可以自定义覆盖层的内容。例如,显示一个带有文本的消息对话框:
void _showMessageDialog() {
LightningOverlay.show(
context,
widget: AlertDialog(
title: Text('Info'),
content: Text('This is a custom message dialog.'),
actions: <Widget>[
TextButton(
onPressed: () {
LightningOverlay.hide(context);
},
child: Text('OK'),
),
],
),
// 设置点击背景时是否隐藏覆盖层,默认为 true
dismissOnTap: true,
// 设置覆盖层的背景颜色,默认为半透明的黑色
backgroundColor: Colors.black54,
);
}
你可以在按钮的 onPressed
回调中调用 _showMessageDialog
方法来显示这个自定义对话框:
ElevatedButton(
onPressed: _showMessageDialog,
child: Text('Show Message Dialog'),
),
通过这些示例代码,你可以快速了解如何在 Flutter 应用中使用 lightning_overlay
插件来实现覆盖层功能。根据你的需求,你可以进一步自定义覆盖层的内容和样式。