Я создаю новый проект Flutter.

Я хочу проверить статус подключения к Интернету для всего приложения с помощью Provider.

Я включил оба пакета «подключение» и «поставщик» в файл pubspec.yaml.

Затем я изменил main.dart следующим образом, включив в него streamprovider для плагина Connectivity:

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider(
            create: (context) => Connectivity().onConnectivityChanged),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'My New App',
        theme: ThemeData(
          backgroundColor: Colors.white,
        ),
        home: MyHomePage(title: 'My New App Login'),
      ),
    );
  }
}

Что мне делать с каждым новым классом, на котором я хочу проверить статус подключения к Интернету?

Я знаю, что мне нужно создать экземпляр поставщика:

var connectionStatus;
connectionStatus = Provider.of<ConnectivityResult>(context);

Но тогда что мне делать, чтобы прослушивать статус подключения в каждом классе?

2
mvasco 1 Мар 2021 в 13:55

2 ответа

Лучший ответ

Я продолжал получать ошибку, что бы я ни делал. Продолжал давать мне результат null. Так что я подумал, что увижу код, и вот, что я найду ...

enter image description here

enter image description here

Я буквально понятия не имею, в чем проблема, или это проблема только на моей стороне, рип.

РЕДАКТИРОВАТЬ:

Я следил за тем, как это делал Moneer, и это работает, лол.

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider(create: (context) => Connectivity().onConnectivityChanged),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'My New App',
        theme: ThemeData(
          backgroundColor: Colors.white,
        ),
        home: MyHomePage(title: 'My New App Login'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  String _connectivityType = 'Init';

  void _getConnectionStatus(ConnectivityResult con) {
    print(con);
    setState(() {
      switch (con) {
        case ConnectivityResult.mobile:
          _connectivityType = 'Mobile';
          break;
        case ConnectivityResult.wifi:
          _connectivityType = 'Wifi';
          break;
        case ConnectivityResult.none:
          _connectivityType = 'None';
          break;
        default:
          _connectivityType = 'Unknown';
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    final con = Provider.of<ConnectivityResult>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_connectivityType',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => _getConnectionStatus(con),
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
1
rkdupr0n 1 Мар 2021 в 11:38

ConnectivityResult - это перечисление, поэтому вам нужно его сравнить.


/// Connection status check result.
enum ConnectivityResult {
  /// WiFi: Device connected via Wi-Fi
  wifi,

  /// Mobile: Device connected to cellular network
  mobile,

  /// None: Device not connected to any network
  none
}

Вы также должны проверить, равно ли значение null, я не совсем помню, почему

0
moneer alhashim 1 Мар 2021 в 11:34