用惯了iOS的SVProgressHUD,但是在flutter pub上的并没有找到类似的实现,于是自己实现一个
主要实现四个基本功能
- Loading显示
- 成功显示
- 错误显示
- 进度显示:环形进度条和文字
库地址
https://pub.dartlang.org/packages/bmprogresshud
1 | dependencies: |
实现效果
- 由于HUD是盖在视图上面的,通常是整个页面,故考虑直接在目标Widget上套一层
ProgressHUD
- 我们需要在特定的地方获取
ProgressHUD
进行操作,这个有点类似Navigator
,参考Navigator的用法,通过of
方法获得
实际效果如下
1 | Widget build(BuildContext context) { |
实现效果
1. 显示和隐藏渐变
通过属性opacity
和AnimationController
控制透明度,当透明度为0时候,通过Offstage
控制控件的隐藏
1 | class ProgressHudState extends State<ProgressHud> with SingleTickerProviderStateMixin { |
我们通过动画的执行方向控制动画
1 | // 显示动画 |
2. 通过BuildContext
获得Element树的ProgressHUD
1 | class ProgressHud extends StatefulWidget { |
3. 创建HUD
1 | Widget _createHudView(Widget child) { |
4. 环形进度
通过Painter画两个圆
1 | import 'dart:math'; |
完整代码见这里: