Flutter如何实现elegant_notification通知效果
在Flutter中如何实现类似elegant_notification的优雅通知效果?目前官方提供的SnackBar样式比较单一,想实现带有图标、自定义颜色和动画效果的弹窗通知。有没有推荐的第三方库或实现方案?最好能支持自定义布局和点击事件处理。
2 回复
在Flutter中实现类似 elegant_notification 的通知效果,可以通过自定义组件或使用现有库来创建美观、流畅的通知。以下是实现方法:
1. 使用 elegant_notification 库(推荐)
首先添加依赖到 pubspec.yaml:
dependencies:
elegant_notification: ^2.0.0 # 使用最新版本
基本用法示例:
import 'package:elegant_notification/elegant_notification.dart';
import 'package:elegant_notification/resources/arrays.dart';
// 显示成功通知
ElegantNotification.success(
title: Text("操作成功"),
description: Text("您的数据已保存"),
position: Alignment.topCenter, // 位置
animation: AnimationType.fromTop, // 动画类型
autoDismiss: true, // 自动关闭
duration: Duration(seconds: 3), // 显示时长
).show(context);
// 错误通知
ElegantNotification.error(
title: Text("发生错误"),
description: Text("请检查网络连接"),
).show(context);
// 自定义通知
ElegantNotification(
title: Text("自定义通知"),
description: Text("这是一个自定义样式通知"),
icon: Icon(Icons.info, color: Colors.white),
background: Colors.blue,
progressIndicatorColor: Colors.white,
).show(context);
2. 自定义实现(核心思路)
如果希望完全自定义,可以通过 Overlay 实现:
void showCustomNotification(BuildContext context) {
OverlayEntry overlayEntry = OverlayEntry(
builder: (context) => Positioned(
top: MediaQuery.of(context).padding.top + 10,
left: 20,
right: 20,
child: Material(
elevation: 8,
borderRadius: BorderRadius.circular(12),
child: Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.circular(12),
),
child: Row(
children: [
Icon(Icons.check_circle, color: Colors.white),
SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("成功", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
Text("操作已完成", style: TextStyle(color: Colors.white)),
],
),
),
IconButton(
icon: Icon(Icons.close, color: Colors.white),
onPressed: () => overlayEntry.remove(),
)
],
),
),
),
),
);
Overlay.of(context).insert(overlayEntry);
Future.delayed(Duration(seconds: 3), () => overlayEntry.remove());
}
关键特性
- 动画效果:使用
AnimationController实现滑入/淡入动画 - 多种样式:成功、错误、警告、信息等预设样式
- 灵活定位:支持顶部、底部、居中显示
- 自动关闭:可配置显示时长和自动关闭
- 交互支持:支持点击关闭和动作按钮
使用建议
- 对于快速实现,直接使用
elegant_notification库 - 需要深度定制时,可基于
Overlay+AnimatedContainer自行实现 - 注意通知的层级管理,避免多个通知重叠
这种方法可以创建出与 elegant_notification 类似的专业通知效果,同时保持代码的简洁性和可维护性。


