[Flutter] 全局检测是否存在一个 StatefulWidget

全局检测是否存在一个 StatefulWidget

在Flutter中,有时候我们需要判断是否已经打开了某个页面,这种需要有很多的实现方式,今天给大家介始一个比较简单的。

StateHelper

import 'package:flutter/material.dart';

class StateHelper {
  StateHelper._();

  static final _stateMap = Map<Type, int>();

  /// 判断是否存在某个页面的实例
  static bool has<T extends StatefulWidget>() {
    return _stateMap.containsKey(T);
  }
}

abstract class StateEx<T extends StatefulWidget> extends State<T> {

  @protected
  @mustCallSuper
  void initState() {
    StateHelper._stateMap[T] = DateTime.now().millisecondsSinceEpoch;
    super.initState();
  }

  @protected
  @mustCallSuper
  void dispose() {
    StateHelper._stateMap.remove(T);
    super.dispose();
  }

}

用法很简单,将要检测的基于 StatefulWidget 的页面的 State 替换成上面代码中的 StateEx 类,就可以使用下面的方法来判断了:

final isExist = StateHelper.has<XXXXPage>();
print(isExist);
posted @ 2021-04-19 18:37  我爱我家喵喵  阅读(764)  评论(0编辑  收藏  举报