android - 是否可以自定义 Flutter Webview 错误消息?

标签 android ios flutter mobile webview

我正在 Flutter 中开发 WebView 移动应用程序,我想自定义 webview 错误,因为如果客户将他的 wifi 关闭并且他得到“net::ERR_ADDRESS_UNREACHABLE”,那就不太好了。所以我想将此页面更改为一些自定义设计并显示类似“此应用程序需要互联网连接,您应该打开您的 wifi”之类的内容。

这样的事情可能吗?我在文档中搜索但一无所获。

非常感谢。

最佳答案

不确定我们是否可以修改 webview 本身显示的实际消息,但我已经使用了一个解决方法。

您可以使用 Stack 小部件,并在发生错误时在单独的小部件中显示自定义消息。示例代码如下。

     Stack(
          children: [
            if (!controller.isError)
              WebView(
                javascriptMode: JavascriptMode.unrestricted,
                initialUrl: "https://some-random-url.com",
                onPageFinished: controller.onLoaded,
                onWebResourceError: controller.onError,
              ),
            if (controller.isLoading)
              Center(
                child: CircularProgressIndicator(
                  valueColor: AlwaysStoppedAnimation<Color>(Colors.black),
                ),
              ),
            if (controller.isError)
              Center(
                child: Padding(
                  padding: const EdgeInsets.only(left: 8.0, right: 8.0),
                  child: Text(
                    text: "Something went wrong, please try again", 
                  ),
                ),
              )
          ],
        ),

你看到的Controller对象是我用来管理状态的GetX Controller ,你可以随意使用。主要 Action 元素是

  1. isError -> 监控是否发生错误的状态变量。

  2. WebView.onWebResourceError -> 发生特定错误时调用的回调函数。 您可以将一个函数传递给它,并且只有在发生错误时才会调用此回调。这样,您就可以将状态变量 isError 修改为 true,这将依次隐藏 webview 并在屏幕中央显示错误消息。

有了这个,您将拥有您正在寻找的错误处理。

PS:我知道我迟到了,但我希望其他人觉得它有用。

关于android - 是否可以自定义 Flutter Webview 错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489528/

相关文章:

iphone - 在旧 iPhone/iPod Touch 上测试应用程序是否有意义

ios - 使用 swiftvalidator 时,类 'AppDelegate' 的重复接口(interface)定义错误和属性有先前的声明错误

flutter - 显示顶部带有图钉的交互式图像

flutter - 如何知道特定项目是在哪个 flutter 版本上制作的?

flutter - 如何删除 Flutter IconButton 大填充?

java - 如何定义我的应用程序可以运行的 SDK 范围

android - 在 Android 上使用 C/C++ 库

android - 位图缩放破坏质量

安卓导航组件。显示全屏对话框,导航图标从箭头变为十字

iOS : Video recording using avcam in landscape mode?