一个真正意义上的flutter Toast库!
Language: English | 中文简体
-
真正意义上的Toast,可以在任何你需要的时候调用,不会有任何限制! (这是他最重要的特点,跟别的Toast库不同的地方)
-
功能丰富,支持显示通知,文本,加载,附属等类型Toast
-
支持在弹出各种自定义Toast,或者说你可以弹出任何Widget,只要它符合flutter代码的要求即可
-
Api简单易用,基本上没有必要参数(包括BuildContext),基本上都是可选参数
-
纯flutter实现,不容易带来兼容问题
在线例子 (Web效果可能有偏差,真实效果请以手机端为准,第一次加载可能会很久)
Notification | Attached | CustomAnimation |
---|---|---|
Loading | Text | CustomWidget |
---|---|---|
dependencies:
bot_toast: ^2.0.0
import 'package:bot_toast/bot_toast.dart';
//1.使用BotToastInit直接包裹MaterialApp
BotToastInit(
child:MaterialApp(
title: 'BotToast Demo',
navigatorObservers: [BotToastNavigatorObserver()],//2.注册路由观察者
home: XxxxPage(),
)
);
BotToast.showText(text:"xxxx"); //弹出一个文本框;
BotToast.showSimpleNotification(title: "init"); //弹出简单通知Toast
BotToast.showLoading(); //弹出一个加载动画
//弹出一个定位Toast
BotToast.showAttachedWidget(
attachedWidget: (_) => Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Icon(
Icons.favorite,
color: Colors.redAccent,
),
),
),
duration: Duration(seconds: 2),
target: Offset(520, 520));
-
支持自定义Toast的动画和持续时间😉
-
添加
showAnimationWidget
方法,可以使用此方法来高度自定义一个有动画的Toast🤩 -
修改了初始化的方式使之更为通用,1.x版本升级到2.0修改需手动修改来进行适配。(参考了overlay_support库的初始化方式,非常感谢)
-
删除
reInit
方法(2.0版本不再需要),以及PreferDirection.Below
和PreferDirection.Upside
这两个已经被弃用的枚举
- 修改BotInit使用的位置,现在是直接包裹
MaterialApp
,而不是XxxPage
///1.x.x版本的初始化方式
MaterialApp(
title: 'BotToast Demo',
navigatorObservers: [BotToastNavigatorObserver()],
home: BotToastInit( //2.初始化BotToast
child: XxxxPage()
),
);
改为:
//2.x.x版本的初始化方式
//使用BotToastInit直接包裹MaterialApp
BotToastInit(
child:MaterialApp(
title: 'BotToast Demo',
navigatorObservers: [BotToastNavigatorObserver()],
home: XxxxPage(),
)
);
- 修改
showEnhancedWidget
的warpWidget
参数的方法入参(注意这一步不一定需要,这取决于你是否使用过showEnhancedWidget
,如果没有使用过,这步可以省略)
///1.x.x版本
showEnhancedWidget(
...
warpWidget:(widget)=>XxxWrap(child:widget);
...
)
改为:
///2.x.x版本
showEnhancedWidget(
...
warpWidget:(cancel,widget)=>XxxWrap(child:widget);
...
)
-
如果你项目有多个[Navigator],请将该BotToastNavigatorObserver添加到[Navigator.observers]
-
[ToastBuilder]方法生成widget时,请确保生成的Widget背景不会吸收点击事件,例如[Scaffold],[Material]都会默认占满整个父空间, 并且会吸收事件(就算透明也是这种情况),具体例子可看[material.dart->_RenderInkFeatures class->hitTestSelf method] 如果真的要生成,可以考虑使用[IgnorePointer],如果没有遵守规则,将会时某些功能失效例如[allowClick]功能就会失效