Я проверяю подключение с помощью 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}");
// это значение равно нулю
Я хочу установить isoffline=false
при отсутствии подключения к Интернету
Оператор печати работает нормально, но значение bool
не меняется
Хорошо, тогда я думаю, вам нужно вызвать соединение(); этот метод в вашем методе сборки, например @override Widget build(BuildContext context)connection(); { ..... } этот. Потому что initState вызывается только один раз
Я получаю такое значение value null
Но он отлично работает на странице main.dart
Хорошо означает, что вы хотите вызывать этот метод постоянно, когда пользователь достигает этой страницы, верно?
не непрерывно только один раз, но проблема в том, что значение bool
не меняется
Если возможно, могу ли я добавить один ответ, это может помочь вам, если это возможно
Связность функции является асинхронной функцией. Вы вызываете функцию и сразу же проверяете логическое значение, поэтому вы получаете ноль. Вы должны дождаться выполнения, либо используя синтаксис await, либо then.
connectivity().then((value) {
print("value ${isoffline}");
});
В вашем коде connectivity();
метод async
, что означает, что для его завершения потребуется некоторое время.
Теперь, когда вызывается метод init
, он выполняет connectivity();
, а затем немедленно выполняет print("value${isoffline}");
, теперь значение для isoffline
изначально равно null
, поэтому null
печатается
Решение: либо вы помещаете print("value${isoffline}");
в метод connectivity();
, либо пытаетесь добавить его после метода build
.
@override
Widget build(BuildContext context) {
connectivity();
print("value${isoffline}");
return YourWidget();
}
Спасибо, сэр, но я не хотел постоянно проверять подключение
setState не звонит? что именно ты хочешь?