flutter - Flutter :此错误出现 Scaffold.of() 调用的上下文不包含 Scaffold。当我尝试展示小吃店时
问题描述
当连接状态发生变化时,我尝试使用snackBar,而当我使用打印时,连接工作正常。但是当我尝试使用 Scaffold.of(context).showSnackBar ....,
我在使用不包含脚手架的上下文调用 ['Scaffold.of() 时遇到错误。
从传递给 Scaffold.of() 的上下文开始,找不到任何 Scaffold 祖先。这通常发生在提供的上下文来自与其构建函数实际创建正在寻找的 Scaffold 小部件相同的 StatefulWidget 时。
']
- 我创建了一个包装类,其中包含一个 Widget 作为构造函数
import 'package:Zabatnee/activities_app/enum/connectivity_status.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class ConnectivityWrapper extends StatefulWidget {
final Widget childWidget;
ConnectivityWrapper(this.childWidget);
@override
_ConnectivityWrapperState createState() => _ConnectivityWrapperState();
}
class _ConnectivityWrapperState extends State<ConnectivityWrapper> {
Widget _showOfflineSnakbar(){
Scaffold.of(context).showSnackBar(
SnackBar(
content:
Text(
'No internet connection',
),
duration: Duration(seconds: 3),
),
);
}
@override
void didChangeDependencies() {
var connectionState = Provider.of<ConnectivityStatus>(context);
if(connectionState == ConnectivityStatus.Offline){
print('the internet is offline');
_showOfflineSnakbar();
}if(connectionState == ConnectivityStatus.Wifi || connectionState == ConnectivityStatus.Cellular){
print('the internet is online');
_showOfflineSnakbar();
}
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
return widget.childWidget;
}
}
- 在 main.dart 中,我将包装类用作 HomePage 并将真正的 homeScreen 放入其中:
home: ConnectivityWrapper(
CategoriesScreen(),
),
解决方案
好吧,您似乎还没有在任何父小部件中构建 Scaffold。
要么这样做,要么看看 Flushbar 包。
推荐阅读
- coq - 为什么基于微积分的语言如此多地使用 Setoid?
- mysql - 如何在 MySQL 中找到不同组的列的聚合总和的差异?
- python - 装饰器函数来包装一个函数?
- android - 如何使用 RxAndroidBle 调用多个 setupIndication
- vue.js - NuxtJS中如何为publicPath、outputDir、indexPath配置不同的路径
- ios - SwiftUI - 输入文本时防止 TextField 扩展
- c++ - 将 char** 转换为 int C++
- rust - 变量的所有权如何在迭代之间起作用?
- php - 限制机器中的索引文件
- typescript - 如何在 Nestjs 的 service.spec 文件中模拟 gmail 以及如何测试它?