启动后检查Internet连接

时间:2019-10-08 15:44:32

标签: flutter

我是个新手。我正在开发一个包含初始屏幕小部件的应用程序,然后将显示主屏幕。我只想检查是否有互联网连接,如果可以,它将进入主屏幕,否则将关闭。我已经以编程方式检查了互联网连接。可以,但没有任何互联网连接,它将转到主屏幕。请帮忙。预先感谢。

class Splashscreen extends StatefulWidget {

          @override
           State<StatefulWidget> createState() =>  _Splashscreenmain();
            }

         class _Splashscreenmain extends State<Splashscreen>{

  Helperfunction helperfunction = new Helperfunction();
  @override
  void initState() {
  super.initState();
  startSplashScreen();
  }

  startSplashScreen() async {
    var duration = const Duration(seconds: 10);
    if (helperfunction.internetConnection() != "No Internet"){
    return Timer(duration, () {

        Navigator.of(context).pushReplacement(
            new MaterialPageRoute(builder: (BuildContext context) {
              return MyApp();
            }));
    });
  }
    else {

      print(helperfunction.internetConnection());
      SystemChannels.platform.invokeMethod('SystemNavigator.pop');
    }
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Container(
 child: Image.asset('assets/images/splashscreen.png',fit: BoxFit.cover,
   height: double.infinity,
   width: double.infinity,
   alignment: Alignment.center,),

      ),

    );
  }



} 

我已打印出internetConnection()函数结果,但未执行'else'部分。

1 个答案:

答案 0 :(得分:1)

如果没有互联网连接,您想关闭应用程序。 您可以使用SystemNavigator.pop().来做到这一点不适用于ios,因为在iOS中,应用程序不应自行退出。我建议您向用户显示一个对话框,以启用Internet连接。

SystemChannels.platform.invokeMethod('SystemNavigator.pop');

来自docs。 指示系统导航器从堆栈中删除此活动并返回上一个活动。

在iOS上,对此方法的调用将被忽略,因为Apple的人机界面指南指出应用程序不应自行退出。

与调用dart:io的exit方法相比,此方法应更为可取,因为后者可能导致底层平台的运行就像应用程序崩溃一样。