全局检测是否存在一个 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);