(颤振)如果没有互联网连接,如何启动静态 html 页面而不是 URL?

Posted

技术标签:

【中文标题】(颤振)如果没有互联网连接,如何启动静态 html 页面而不是 URL?【英文标题】:(Flutter) How to launch static html page instead of URL if there is no internet connection? 【发布时间】:2019-08-12 11:21:26 【问题描述】:

我已经安装了 flutter_webview_plugin。如果没有互联网连接,我正在尝试启动自定义静态 html 页面而不是我的 URL(我的网站 'wwww.duevents.in'),因为“网页不可用”页面看起来不是很专业。

我正在使用它来检查设备上的互联网,它工作正常(互联网连接时'connectionStatus ==true',反之亦然):

Future check() async 
try 
  final result = await InternetAddress.lookup('google.com');
  if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) 
    connectionStatus = true;
    print("connected $connectionStatus");
  
 on SocketException catch (_) 
  connectionStatus = false;
  print("not connected $connectionStatus");

这是我在没有互联网连接时加载备用 URL 的代码:

WebviewScaffold(      
  url: connectionStatus == true ?"http://www.duevents.in" : Uri.dataFromString('<html><body>hello world</body></html>', mimeType: 'text/html').toString())

不管设备是否有互联网连接,它总是以某种方式向我显示带有此代码的 HTML 页面。请告诉我这里出了什么问题。

【问题讨论】:

您尝试使用FutureBuilder 吗? @Mazin No. 我在哪里需要它? 此解决方案将帮助您实现FutureBuilder,因此您只有在获取连接状态后才能检查连接状态***.com/questions/54634418/… 我应该为“未来:”分配什么?附:我很抱歉问了很多问题,我对这个东西很陌生,所以我知道的很少。 您的check() 方法。所以它会是future: check(), 【参考方案1】:

@Mazin Ibrahim 在上述 cmets 中提供的解决方案对我有用。

所以我在这里发布解决方案:

    FutureBuilder(
        future: check(), // a previously-obtained Future or null
        builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) 
          if (connectionStatus == true) 
           //if Internet is connected
            return SafeArea(
                child: WebviewScaffold(
              url: "http://www.duevents.in"))
               else 
                //If internet is not connected
                  return SafeArea(
                 child: WebviewScaffold(
                  url: Uri.dataFromString('<html><body>hello world</body></html>',
                    mimeType: 'text/html').toString()) )

【讨论】:

【参考方案2】:

我建议你更改check()方法直接返回URL。

Future<String> getURL() async 
    try 
      final result = await InternetAddress.lookup('google.com');
      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) 
        return "http://www.duevents.in";
      
     on SocketException catch (_) 
      return Uri.dataFromString('<html><body>hello world</body></html>', mimeType: 'text/html').toString();
    

那么在FutureBuilder 中,您可以使用直接返回的 URL。

FutureBuilder(
        future: getURL(), // a previously-obtained Future or null
        builder: (BuildContext context, String url) 
            return SafeArea(
                child: WebviewScaffold(
                url: url))
           )

【讨论】:

以上是关于(颤振)如果没有互联网连接,如何启动静态 html 页面而不是 URL?的主要内容,如果未能解决你的问题,请参考以下文章

颤振互联网连接无法在真实设备上运行

当网络连接恢复时,使用 Bloc /Cubit 颤振不会发生自动刷新?

颤振的网络套接字

如果您的项目有 dart html 导入,如何在模拟器上运行颤振

使用 MVC 和颤振颤振网站和应用程序如何连接后端?

android根据互联网连接更改视图