Флаттер Как слушать переменную из другого класса - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу прослушивать переменные из другого класса во флаттере, поэтому всегда нужно знать, имеет ли приложение inte rnet соединение. У меня есть streamcontroller в checknetwork.dart и слушать в home.dart. Я ничего не получаю при операторе печати

CheckNetwork.dart

class NetworkCheck {
  var streamController = StreamController();

  Future<bool> check() async {
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.mobile) {
      streamController.sink.add(true);
        streamController.close();

      return true;
    } else if (connectivityResult == ConnectivityResult.wifi) {
      streamController.sink.add(true);
      streamController.close();

      return true;
    }
    return false;
  }

  dynamic checkInternet(Function func) {
    check().then((internet) {
      if (internet != null && internet) {
        func(true);
      }
      else{
        func(false);
      }
    });
  }
}

Home.dart

class Home extends StatefulWidget {
    const Home({Key key}) : super(key: key);


  @override
  HomeState createState() => HomeState();
}

class HomeState extends State<Home>{
Future _checkNetwork() async {

  NetworkCheck networkcheck = NetworkCheck();

  networkcheck.streamController.stream.listen((data) {
  print('Got! $data');
  });
  }

1 Ответ

1 голос
/ 28 апреля 2020

Вам нужна система управления состоянием, чтобы контроллер потока был доступен для всех классов, и это был бы эффективный способ, но если вы все еще хотите, чтобы ваш текущий код работал, чем вызов метода проверки класса NetworkCheck перед прослушиванием потока .

Поэтому измените ваш home.dart следующим образом:

class Home extends StatefulWidget {
    const Home({Key key}) : super(key: key);


  @override
  HomeState createState() => HomeState();
}

class HomeState extends State<Home>{
Future _checkNetwork() async {

  NetworkCheck networkcheck = NetworkCheck();

 //this will provide value in your stream.
  networkcheck.check();

  networkcheck.streamController.stream.listen((data) {
  print('Got! $data');
  });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...