运行扑应用只有Internet连接可用(Run Flutter App only if intern

2019-10-28 08:18发布

我想我扑运行的应用程序只有当Internet连接可用。 如果互联网不存在显示一个对话框(互联网不存在)我使用conectivity插件,但仍不满意。

这是我的主要功能

Future main() async {
  try {
  final result = await InternetAddress.lookup('google.com');
  if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
    print('connected');
  }
} on SocketException catch (_) {
  print('not connected');
}
  runApp(MyApp());}

Answer 1:

您不能使用对话框中main()因为没有有效的方法直接context推出。

下面是你在找什么的基本代码。

void main() => runApp(MaterialApp(home: MyApp()));

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    Timer.run(() {
      try {
        InternetAddress.lookup('google.com').then((result) {
          if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
            print('connected');
          } else {
            _showDialog(); // show dialog
          }
        }).catchError((error) {
          _showDialog(); // show dialog
        });
      } on SocketException catch (_) {
        _showDialog();
        print('not connected'); // show dialog
      }
    });
  }

  void _showDialog() {
    // dialog implementation
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
            title: Text("Internet needed!"),
            content: Text("You may want to exit the app here"),
            actions: <Widget>[FlatButton(child: Text("EXIT"), onPressed: () {})],
          ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Internet")),
      body: Center(
        child: Text("Working ..."),
      ),
    );
  }
}


文章来源: Run Flutter App only if internet connection is available
标签: dart flutter