我正在 Flutter 中开发 WebView 移动应用程序,我想自定义 webview 错误,因为如果客户关闭了他的 wifi 并且他得到了"net::ERR_ADDRESS_UNREACHABLE",那就不是那么好了。所以我想将此页面更改为一些自定义设计,并显示类似"此应用程序需要互联网连接,您应该打开 wifi"之类的内容。
这样的事情可能吗?我在文档中搜索,但一无所获。
多谢。
不确定我们是否可以修改从 Web 视图本身显示的实际消息,但我使用了一种解决方法。
您可以使用 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",
),
),
)
],
),
您看到的控制器对象是我用于状态管理的 GetX 控制器,您可以自由使用任何您喜欢的东西。主要动作元素是
isError
-> 状态变量,用于监视是否发生了错误。WebView.onWebResourceError
-> 发生特定错误时调用的回调函数。 你可以将一个函数传递给这个,这个回调只在发生错误时调用。这样,您可以将状态变量isError
修改为 true,这反过来又会隐藏 Web 视图并在屏幕中央显示错误消息。
有了这个,您将拥有所需的错误处理。
PS:我知道我迟到了这个答案,但我希望其他人觉得它有用。