导航到另一个页面时未调用 setState

时间:2020-12-24 15:09:48

标签: flutter dart

我正在使用 Connectivity().checkConnectivity() 检查连接它正在工作,但是当我导航到此页面时 setState() 没有调用。

要导航到主页到另一个页面,我正在使用 Navigator.push(context, MaterialPageRoute(builder: (context) => search()));

这是我的下一页

 class search extends StatefulWidget {
@override
_searchState createState() => _searchState();
}

class _searchState extends State<search> {
  List<filter> _list = [];
  List<filter> to_display = [];

bool isoffline;

Future<void> connectivity() async {
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
  // I am connected to a mobile network.
  setState(() {
    isoffline = true;
  });

  print("connected");
 } else if (connectivityResult == ConnectivityResult.wifi) {
  setState(() {
    isoffline = true;
  });
  // I am connected to a wifi network.
  print("connected");
 } else {
  setState(() {
    isoffline = false;
  });
  print(
      "dissconneteddsfffffffffffffffffffffffffffffffffffffffffffffffffffffffdsfsd");
 }
}

Future _future;
@override
void initState() {
 mylist().then((value) {
  setState(() {
    _list = to_display = value;
  });
});

connectivity();
print("value${isoffline}"); // this value is on null 
_future = data();
super.initState();
}

print("value${isoffline}"); // 此值为空

2 个答案:

答案 0 :(得分:2)

函数连接是一个异步函数。您正在调用该函数并立即检查布尔值,这就是您获得空值的原因。您必须等到执行,使用 await 或 then 语法。

connectivity().then((value) {
   print("value ${isoffline}");
});

答案 1 :(得分:2)

在您的代码中,connectivity(); 方法是 async,这意味着它需要一些时间才能完成。

现在当调用 init 方法时,它执行 connectivity(); 然后立即执行 print("value${isoffline}"); 现在 isoffline 的值最初是 null,因此 {{1 }} 打印

解决方案是将 null 放在 print("value${isoffline}"); 方法中,或者尝试将其添加到 connectivity(); 方法之后。

build