【问题标题】:how could i check connectivity using cubit?我如何使用cubit检查连接性?
【发布时间】:2021-04-15 07:52:32
【问题描述】:

我需要使用连接库检查应用程序内每个页面的连接性, 所以我将在提供者内使用一肘。问题是何时关闭流以便在用户关闭应用程序时释放它?

就像这样:

import 'package:connectivity/connectivity.dart';
@override
dispose() {
  super.dispose();
  subscription.cancel();
}

 

【问题讨论】:

  • 请重新审视您的问题并澄清......基本上所有这些。我们坐在世界的另一端,没有你所拥有的背景。一个如此笼统和模糊的问题是无法回答的。请发布您的完整代码并在该上下文中提出问题。我看不到连接检查,我看不到肘,我什至不知道您的程序中的“订阅”是什么。那我怎么可能说些什么来帮助你呢?

标签: flutter dart connection wifi


【解决方案1】:

1.确保您已在 pubspec.yaml 中导入了 flutter_blocconnectivity_plus

2。创建 InternetCubit 文件:

  • internet_cubit.dart
  • internet_state.dart

3。 internet_state.dart:

在这里,我们为我们的 cubit 和 cubit 状态创建带有连接类型的枚举:

part of 'internet_cubit.dart';

enum ConnectionType {
  wifi,
  mobile,
}

@immutable
abstract class InternetState {}

class InternetLoading extends InternetState {}

class InternetConnected extends InternetState {
  final ConnectionType connectionType;

  InternetConnected({@required this.connectionType});
}

class InternetDisconnected extends InternetState {}

4. internet_cubit.dart:

Cubit 依赖于连接插件,因此我们将其导入并创建一个流订阅,以便能够对连接更改做出反应。

我们还定义了两个方法emitInternetConnectedemitInternetDisconnected 来改变实际的cubit状态。

确保正确处理流订阅。

import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:meta/meta.dart';

part 'internet_state.dart';

class InternetCubit extends Cubit<InternetState> {
  final Connectivity connectivity;
  StreamSubscription connectivityStreamSubscription;
  InternetCubit({@required this.connectivity})
      : assert(connectivity != null),
        super(InternetLoading()) {
    connectivityStreamSubscription =
        connectivity.onConnectivityChanged.listen((connectivityResult) {
      if (connectivityResult == ConnectivityResult.wifi) {
        emitInternetConnected(ConnectionType.wifi);
      } else if (connectivityResult == ConnectivityResult.mobile) {
        emitInternetConnected(ConnectionType.mobile);
      } else if (connectivityResult == ConnectivityResult.none) {
        emitInternetDisconnected();
      }
    });
  }

  void emitInternetConnected(ConnectionType _connectionType) =>
      emit(InternetConnected(connectionType: _connectionType));

  void emitInternetDisconnected() => emit(InternetDisconnected());

  @override
  Future<void> close() {
    connectivityStreamSubscription.cancel();
    return super.close();
  }
}

5.在您的应用程序主文件中创建一个Connectivity 插件实例并将其传递给您的BlocProvider。根据您的需要设置消费群:

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_application_4/cubit/internet_cubit.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

void main() => runApp(MyApp(connectivity: Connectivity()));

class MyApp extends StatelessWidget {
  final Connectivity connectivity;

  const MyApp({Key key, this.connectivity}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => InternetCubit(connectivity: connectivity),
      child: MaterialApp(
        title: 'Connectivity cubit',
        home: Scaffold(
          appBar: AppBar(
            title: Text('Connectivity cubit spotlight'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                BlocBuilder<InternetCubit, InternetState>(
                  builder: (context, state) {
                    if (state is InternetConnected &&
                        state.connectionType == ConnectionType.wifi) {
                      return Text(
                        'Wifi',
                        style: TextStyle(color: Colors.green, fontSize: 30),
                      );
                    } else if (state is InternetConnected &&
                        state.connectionType == ConnectionType.mobile) {
                      return Text(
                        'Mobile',
                        style: TextStyle(color: Colors.yellow, fontSize: 30),
                      );
                    } else if (state is InternetDisconnected) {
                      return Text(
                        'Disconnected',
                        style: TextStyle(color: Colors.red, fontSize: 30),
                      );
                    }
                    return CircularProgressIndicator();
                  },
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2014-01-15
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多