Как создать снэк-бар, который появляется на всех экранах? - PullRequest
1 голос
/ 24 октября 2019

Мне нужно создать снэк-бар, который появляется, когда нет соединения, я создал его, но он появляется только на одном экране, как я могу сделать его видимым на всех экранах, когда нет соединения.

На моем домашнем экране я называю это checkInternet(context); в методе init. Он отлично работает на домашнем экране, но когда я перехожу на другие экраны, он не показывает снэк-бар.

Моя функция проверки интернета:

import 'package:flushbar/flushbar.dart';

checkInternet(BuildContext context) async {

  // actively listen for status updates
  var listener = DataConnectionChecker().onStatusChange.listen((status) {
print('networrk status $status');
    switch (status) {
      case DataConnectionStatus.connected:
        shownewFlushBar(context,Colors.green,'You are Online',false);
        break;
      case DataConnectionStatus.disconnected:
        shownewFlushBar(context,Colors.red,'You are Offline',true);
        break;
    }
  });

  return await DataConnectionChecker().connectionStatus;
}

void shownewFlushBar(BuildContext context,Color bgcolor,String text,bool pindic)
{
  Flushbar(
    showProgressIndicator: pindic,
    message: text,
    backgroundColor: bgcolor,
    duration: Duration(seconds: 3),
    isDismissible: false,
  )..show(context);
}

Может ли кто-нибудь помочь мне с этим.

1 Ответ

0 голосов
/ 25 октября 2019

Всякий раз, когда вы переходите на другой экран, просто проверяйте подключение к Интернету с помощью build метода

Зависимость: connectivity: 0.4.3+6

1) Первый вариант

  @override
  Widget build(BuildContext context) {

       var isConnected = await isInternetConnected();
       if (isConnected != true) {
          // Snackbar show here
       }
  }

Проверьте подключение к Интернету, используя этот метод

  Future<bool> isInternetConnected() async {
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.mobile ||
        connectivityResult == ConnectivityResult.wifi) {
      return true;
    }
    return false;
  }

2) Второй параметр

Добавьте прослушиватель в файл initState() из main.dart, чтобы при каждом подключенииэто изменение вы получите ответ

  @override
  void initState() {
    super.initState();
    Connectivity().onConnectivityChanged.listen((ConnectivityResult result){
      if(result == ConnectivityResult.none){

          // use Future.delayed() if you want context in initState
          Future.delayed(Duration.zero,(){
            print(" Internet connection is lost");        
          });

      }
    });
  }
...