如何创建一个出现在所有屏幕上的小吃店?

Posted

技术标签:

【中文标题】如何创建一个出现在所有屏幕上的小吃店?【英文标题】:How to create a snack bar that appears in all screen? 【发布时间】:2020-02-21 05:06:55 【问题描述】:

我需要创建一个在没有连接时出现的小吃店, 我创建了一个,但它只出现在一个屏幕中,我怎样才能让它在没有连接时在所有屏幕中可见。

在我的主屏幕中,我在 init 方法中将其称为 checkInternet(context);。它在主屏幕上完美运行,但是当我导航到其他屏幕时,它不显示小吃栏。

我的上网查功能:

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);

谁能帮我解决这个问题。

【问题讨论】:

我为此使用了 pub.dev/packages/flashbar。由于您提到的原因,我发现小吃店很难使用 你的问题是你有很多脚手架和 Scaffold.of(context).showSnackBar(snackBar);使用起来很棘手吗? 我使用flushbar包。我的问题是,只要连接性发生变化,它就会在主屏幕中显示小吃栏,但是当我导航到其他屏幕然后连接性发生变化时,它不会出现。 我会更新我的问题 【参考方案1】:

每当您重新访问另一个屏幕时,只需在您的 build 方法中检查互联网连接

依赖:connectivity: 0.4.3+6

1) 第一个选项

  @override
  Widget build(BuildContext context) 

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

使用此方法检查Internet Connection

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

2) 第二种选择

main.dart 文件的initState() 中添加监听器,这样每当连接发生变化时,您都会得到响应

  @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");        
          );

      
    );
  

【讨论】:

以上是关于如何创建一个出现在所有屏幕上的小吃店?的主要内容,如果未能解决你的问题,请参考以下文章

在每个屏幕上的 fcm 通知上显示小吃栏

Kotlin 创建一个小吃店

如何在 Flutter 中的 navigator.pop(context) 之后显示小吃栏?

如何以 xamarin 形式在屏幕顶部显示小吃店或烤面包

小吃店与吐司

如何在不重叠的情况下显示多个小吃店