首页 > 解决方案 > 没有互联网连接时返回页面而不是吐司

问题描述

我正在构建颤振应用程序并创建了一个检查互联网连接的功能,如果没有互联网连接,它应该向我显示一个页面(在此处创建 Internet()页面),并显示消息“无法连接重试..”,我在这里尝试在下面的 if 语句中路由到互联网页面,但它没有用。但是,它与吐司完美搭配,有什么帮助吗?

ps:it throws “用于从 Navigator 推送或弹出路由的上下文必须是作为 Navigator 小部件后代的小部件的上下文。”

import 'package:flutter/material.dart';
import 'dart:io'; //InternetAddress utility
import 'dart:async';
import 'package:connectivity/connectivity.dart';
import 'package:fluttertoast/fluttertoast.dart';

  runApp(
   
      child: Notification(),
  );


class Notification extends StatefulWidget {
  @override
  _NotificationState createState() => _NotificationState();
}

class _NotificationState extends State<Notification> {
  var subscription;
  var connectionStatus;

  @override
  void initState() {
subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {         
        setState(() => connectionStatus = result);
        checkInternetConnectivity();
});
    
    
    super.initState();
  }

   checkInternetConnectivity() {
 if (connectionStatus == ConnectivityResult.none) {
  Navigator.push(
    context,
    PageRouteBuilder(
      pageBuilder: (_, __, ___) => MaterialApp(home: Builder(builder: (_) => Internet())),
      transitionDuration: Duration.zero,
    ),
  );
}}


  // checkInternetConnectivity() {
  //   if (connectionStatus == ConnectivityResult.none) {
  //     return 
 
  //     Fluttertoast.showToast(
  //         msg: "Check your internet connection",
        
  //         toastLength: Toast.LENGTH_LONG,
  //         gravity: ToastGravity.TOP,
  //         timeInSecForIosWeb: 10,
  //         backgroundColor: Colors.red,
  //         textColor: Colors.white,
  //         fontSize: 16.0
  //     );
  //   }
  // }

  @override
  dispose() {
    super.dispose();
    subscription.cancel();
  }
  
  
  Widget build(BuildContext context) {
 
    return MaterialApp(
          
          home: MyHomePage(),

          localizationsDelegates:
              translator.delegates,
          locale: translator.locale, // Active locale
          supportedLocales: translator.locals(),

    
  
}

class MyHomePage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
   
    return Scaffold(
        appBar: AppBar(
          iconTheme: new IconThemeData(color: Colors.black),
          backgroundColor: Colors.white,
        
         
        ),
        }}

标签: flutter

解决方案


你不是在导航。改用这个:

if (connectionStatus == ConnectivityResult.none) {
  Navigator.push(
    context,
    MaterialPageRoute(
      builder: (_) => MaterialApp(home: Builder(builder: (_) => Internet())),
    ),
  );
}

如果您不想显示任何类型的路线动画,请使用:

if (connectionStatus == ConnectivityResult.none) {
  Navigator.push(
    context,
    PageRouteBuilder(
      pageBuilder: (_, __, ___) => MaterialApp(home: Builder(builder: (_) => Internet())),
      transitionDuration: Duration.zero,
    ),
  );
}

推荐阅读