SetState не вызывается при переходе на другую страницу

Я проверяю подключение с помощью 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}"); // это значение равно нулю

setState не звонит? что именно ты хочешь?

Shubham Narkhede 24.12.2020 16:12

Я хочу установить isoffline=false при отсутствии подключения к Интернету

Prototype 24.12.2020 16:13

Оператор печати работает нормально, но значение bool не меняется

Prototype 24.12.2020 16:14

Хорошо, тогда я думаю, вам нужно вызвать соединение(); этот метод в вашем методе сборки, например @override Widget build(BuildContext context)connection(); { ..... } этот. Потому что initState вызывается только один раз

Shubham Narkhede 24.12.2020 16:15

Я получаю такое значение value null

Prototype 24.12.2020 16:15

Но он отлично работает на странице main.dart

Prototype 24.12.2020 16:16

Хорошо означает, что вы хотите вызывать этот метод постоянно, когда пользователь достигает этой страницы, верно?

Shubham Narkhede 24.12.2020 16:19

не непрерывно только один раз, но проблема в том, что значение bool не меняется

Prototype 24.12.2020 16:22

Если возможно, могу ли я добавить один ответ, это может помочь вам, если это возможно

Shubham Narkhede 24.12.2020 16:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Связность функции является асинхронной функцией. Вы вызываете функцию и сразу же проверяете логическое значение, поэтому вы получаете ноль. Вы должны дождаться выполнения, либо используя синтаксис 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();
}

Спасибо, сэр, но я не хотел постоянно проверять подключение

Prototype 10.01.2021 18:01

Другие вопросы по теме