Получить данные, когда соединение inte rnet возвращается во Flutter - PullRequest
0 голосов
/ 10 января 2020

Я разрабатываю приложение, которое извлекает некоторые данные из целого rnet. Чтобы избежать проблем с подключением inte rnet, я добавил пакет подключения .

Если inte rnet подключается при запуске приложения, а затем подключение inte rnet выключен, я могу отобразить контейнер с текстом «нет inte rnet». Если я снова включу inte rnet, отобразятся данные.

Код для достижения этой цели следующий:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:connectivity/connectivity.dart';

class CheckNetworkPage extends StatefulWidget {
  @override
  _CheckNetworkPageState createState() => _CheckNetworkPageState();
}

class _CheckNetworkPageState extends State<CheckNetworkPage> {
  StreamSubscription<ConnectivityResult> _networkSubscription;

  Future<List<Data>> fetchData() async {

  // Code to fetch data

 }


  @override
  initState() {
    super.initState();
    fetchData();
    _networkSubscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
     _connectionStatus = result.toString();
     print(_connectionStatus);

     if (result == ConnectivityResult.wifi ||
      result == ConnectivityResult.mobile ||
      result == ConnectivityResult.none) {
      print("Result: $result");
      setState(() {});
  }
    });
  }

// Cancel subscription after you are done
  @override
  dispose() {
    super.dispose();

    _networkSubscription.cancel();
  }

   @override
   Widget build(BuildContext context) {
    // More code. I can use the result of _connectionStatus to build my app
   }
 }

Однако, если приложение запускается без inte rnet, когда я его включаю, данные не загружаются, так как он извлекается в initState().

Как извлечь данные, если они не были извлечены ранее, а соединение rnet включено ?

1 Ответ

1 голос
/ 10 января 2020

Вы можете хранить последние полученные данные в переменной.

List<Data> fetchedData;

Future<List<Data>> fetchData() async {

  // Code to fetch data
  // Add this :
  fetchedData = ...
}

Затем в вашем слушателе проверьте, определены ли эти данные:

if (result == ConnectivityResult.wifi ||
    result == ConnectivityResult.mobile ||
    result == ConnectivityResult.none) {
        print("Result: $result");
        setState(() {});
        // Add this : 
        if (fetchedData == null) fetchData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...