gpt4 book ai didi

flutter - Flutter:是否可以在main.dart中一次实现一个 snackbar ,例如在连接状态更改时在所有屏幕上实现一次

转载 作者:行者123 更新时间:2023-12-03 04:17:33 25 4
gpt4 key购买 nike

  • 我对连接进行枚举:
  • enum ConnectivityStatus{
    Wifi,
    Cellular,
    Offline
    }
  • 然后创建服务以检查连接性:
  • import 'dart:async';

    import 'package:Zabatnee/activities_app/enum/connectivity_status.dart';
    import 'package:connectivity/connectivity.dart';

    class ConnectivityService{

    StreamController<ConnectivityStatus> connectionStatusController = StreamController<ConnectivityStatus>();

    ConnectivityService(){
    Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
    var connectionStatus = _getStatusFromResult(result);
    connectionStatusController.add(connectionStatus);
    });
    }
    ConnectivityStatus _getStatusFromResult(ConnectivityResult result) {
    switch (result) {
    case ConnectivityResult.mobile:
    return ConnectivityStatus.Cellular;
    case ConnectivityResult.wifi:
    return ConnectivityStatus.Wifi;
    case ConnectivityResult.none:
    return ConnectivityStatus.Offline;
    default:
    return ConnectivityStatus.Offline;
    }
    }
    }
  • ,我需要在创建的所有屏幕中检查连接状态。我可以为所有屏幕一次做一次,还是必须逐一检查每个屏幕的连通性?
  • 最佳答案

    您可以一次检查连接状态,并将为您的所有应用实现。
    您只需要创建一个包装器类并订阅Connectivity流并在该包装器类中应用逻辑即可。
    您的整个小部件将被该小部件包装。

    MaterialApp(
    ..
    home: ConnectivityWrapper(
    childWidget: YourWidget(), // replace this with your own home widget
    ),
    );
    包装窗口小部件将如下所示:
    class ConnectivityWrapper extends StatefulWidget {

    ConnectivityWrapper(this.childWidget);

    final Widget childWidget;

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

    class _ConnectivityWrapperState extends State<ConnectivityWrapper> {

    StreamSubscription<ConnectivityStatus> subscription;

    @override
    void initState() {
    super.initState();

    subscription = connectionStatusController.stream.listen((status)
    {
    if(status == ConnectivityStatus.Offline) {
    // Your logic here (Toast message or something else)
    }
    },
    onDone() {
    // Your logic here
    },
    onError: () {
    // Your logic here
    });
    }

    @override
    Widget build(BuildContext context) {
    return widget.childWidget;
    }

    @override
    void dispose() {
    // unsubscribe to the stream
    subscription.cancel();
    super.dispose();
    }
    }

    关于flutter - Flutter:是否可以在main.dart中一次实现一个 snackbar ,例如在连接状态更改时在所有屏幕上实现一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64622653/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com