全局檢測是否存在一個 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);