Skip to content

Latest commit

 

History

History
89 lines (66 loc) · 2.04 KB

File metadata and controls

89 lines (66 loc) · 2.04 KB

基于 Flutter 的弹窗队列

掘金 · 实现过程

功能特性

  • 支持按序弹框
  • 支持按优先级弹框
  • 支持队列中对话框去重
  • 支持暂停 \ 恢复队列弹框

  co0aq-4ahs2.gif

快速上手

安装

往 pubspec.yaml 添加下述依赖,并执行 flutter pub get.

dependencies:
  dialog_queue: ">=1.0.1"
  ...

如何使用

Step 1 : 在你的 MaterialApp 的 navigatorObservers 添加 DialogQueueRouteObserver 实例

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorObservers: [DialogQueueRouteObserver()],
    );
  }
}

Step 2 : 将业务中执行弹框的地方,替换为 DialogQueue.instance.addDialog

原用法:

showModalBottomSheet<T>(
    context: context,
    backgroundColor: Colors.white,
    isScrollControlled: true,
    isDismissible: false,
    builder: (BuildContext context) {
      return SafeArea(child: Text('Hello DialogQueue'));
    },
  );

现用法:

DialogQueue.instance.addDialog(DialogQueueElement(() {
    return showModalBottomSheet(
        context: context,
        backgroundColor: Colors.white,
        isScrollControlled: true,
        isDismissible: false,
        builder: (BuildContext context) {
            return SafeArea(child: Text('Hello DialogQueue'));
        }
    );
}, tag: tag, priority: priority, uniqueKey: uniqueKey));

其他用法

  1. 在任意时候可以暂停 \ 恢复弹框队列的工作
DialogQueue.instance.resume();
DialogQueue.instance.pause();
  1. 暂停弹窗队列,跳转到 PageB,并希望在 PageB pop 的时候恢复弹窗队列的工作
DialogQueue.instance.pushNameThenResume(navigatorState, PageB);

auto-resume-effect.gif