我不确定在这里是否遵循正确的方法。我想使用连接软件包(https://pub.dev/packages/connectivity#-readme-tab-)来监听连接更改。
但是我不想听特定屏幕/小部件上的连接更改。相反,我希望该应用程序全局监听连接更改,并在连接恢复联机时同步数据。
我的第一种方法是
var StreamSubscription subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
// Got a new connectivity status! })
在我的主要职能中。但是然后我得到一个错误,提醒我需要取消打开的订阅。如果在主要功能中打开流订阅,该怎么办? 还是应该将订阅侦听器放在其他位置?
非常感谢您的帮助
答案 0 :(得分:1)
主要功能调用了 runApp ,该调用显示了应用程序的顶级类。 创建新的Flutter应用时-名为 MyApp 。我将以它为例。
您可以做的是将 MyApp 更改为 StatefulWidget 。之后,您可以使用它的 initState 创建订阅,该订阅将一直存在,直到应用程序关闭。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:connectivity/connectivity.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// Define a class variable to hold your subscription
StreamSubscription subscription;
@override
void initState() {
super.initState();
// initialize subscription
subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
print('Got a new connectivity status!');
print(result.toString());
});
}
@override
void dispose() {
// cancel your subscription when the class is removed
subscription.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
.....
);
}
}
PS。不要忘记总是取消类处置中的任何订阅。
希望这会有所帮助。