Flutter 以前调用过inheritFromWidgetOfExactType(InheritedProvider<;ConnectivityStatus>;)或inheritFromElement()
在这个简单的类中,我想使用基态类来管理一些操作,例如访问internet连接:Flutter 以前调用过inheritFromWidgetOfExactType(InheritedProvider<;ConnectivityStatus>;)或inheritFromElement(),flutter,dart,Flutter,Dart,在这个简单的类中,我想使用基态类来管理一些操作,例如访问internet连接: abstract class BaseState<T extends StatefulWidget> extends State { bool isOnline; ConnectivityStatus _connectivityStatus; @override void initState() { super.initState(); _connectivityStat
abstract class BaseState<T extends StatefulWidget> extends State {
bool isOnline;
ConnectivityStatus _connectivityStatus;
@override
void initState() {
super.initState();
_connectivityStatus = Provider.of<ConnectivityStatus>(context);
isOnline = _connectivityStatus == ConnectivityStatus.Connected;
if (!isOnline) {
showSimpleNotification(Text("disconnected"), background: Colors.green);
} else {
showSimpleNotification(Text("connected"), background: Colors.red);
}
}
}
抽象类基态扩展状态{
布尔等值线;
连接状态(ConnectivityStatus);;
@凌驾
void initState(){
super.initState();
_connectivityStatus=Provider.of(上下文);
isOnline=_connectivityStatus==connectivityStatus.Connected;
如果(!isOnline){
showSimpleNotification(文本(“断开”),背景:颜色。绿色);
}否则{
showSimpleNotification(文本(“已连接”),背景:颜色。红色);
}
}
}
当我尝试使用该类时,如:
class _FragmentLoginState extends BaseState<FragmentLogin> with SingleTickerProviderStateMixin {
PageController _pageController;
Color left = Colors.black;
Color right = Colors.white;
@override
void initState() {
super.initState();
_pageController = PageController(initialPage: 1);
}
@override
Widget build(BuildContext context) {
}
}
class\u FragmentLoginState使用SingleTickerProviderStateMixin扩展BaseState{
页面控制器_页面控制器;
左侧颜色=Colors.black;
Color right=Colors.white;
@凌驾
void initState(){
super.initState();
_pageController=pageController(初始页:1);
}
@凌驾
小部件构建(构建上下文){
}
}
问题是您还没有有效的上下文
你可以试试这两种解决办法
- 延迟使用上下文:
@覆盖
void initState(){
super.initState();
_initConnectivity();
}
Future _initConnectivity()异步{
等待未来。延迟AD(持续时间为零);
_connectivityStatus=Provider.of(上下文);
isOnline=_connectivityStatus==connectivityStatus.Connected;
如果(!isOnline){
showSimpleNotification(文本(“断开”),背景:颜色。绿色);
}否则{
showSimpleNotification(文本(“已连接”),背景:颜色。红色);
}
}
- 在构建函数中移动逻辑(在BaseState中)
_initConnectivity(){
_connectivityStatus=Provider.of(上下文);
isOnline=_connectivityStatus==connectivityStatus.Connected;
如果(!isOnline){
showSimpleNotification(文本(“断开”),背景:颜色。绿色);
}否则{
showSimpleNotification(文本(“已连接”),背景:颜色。红色);
}
}
@凌驾
小部件构建(构建上下文){
_initConnectivity();
}
在第二种方法中,您还可以创建一个类似于isFirstBuild
的标志,以确保它只运行一次
这些也可能有助于:
@覆盖
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback(())异步{
_connectivityStatus=Provider.of(上下文);
isOnline=_connectivityStatus==connectivityStatus.Connected;
如果(!isOnline){
showSimpleNotification(文本(“断开”),背景:颜色。绿色);
}否则{
showSimpleNotification(文本(“已连接”),背景:颜色。红色);
}
});
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_connectivityStatus = Provider.of<ConnectivityStatus>(context);
isOnline = _connectivityStatus == ConnectivityStatus.Connected;
if (!isOnline) {
showSimpleNotification(Text("disconnected"), background: Colors.green);
} else {
showSimpleNotification(Text("connected"), background: Colors.red);
}
});
}