flutter_inappwebview 如何在webview路由改变时,改变flutter appbar title
时间: 2023-09-02 22:12:47 浏览: 219
要在Flutter中实现在`flutter_inappwebview`中更改应用程序栏标题,您需要使用`InAppWebViewController`的`shouldOverrideUrlLoading`方法。该方法在Web视图中的任何导航期间调用,在此期间您可以获取导航的URL并相应地更新应用程序栏标题。
下面是一个简单的例子:
```
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
class MyInAppWebView extends StatefulWidget {
@override
_MyInAppWebViewState createState() => _MyInAppWebViewState();
}
class _MyInAppWebViewState extends State<MyInAppWebView> {
InAppWebViewController _webViewController;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My App'),
),
body: InAppWebView(
initialUrl: 'https://www.example.com',
onWebViewCreated: (InAppWebViewController controller) {
_webViewController = controller;
},
shouldOverrideUrlLoading: (controller, navigationAction) async {
var url = navigationAction.request.url;
if (url.contains('example.com')) {
setState(() {
// 更新应用程序栏标题
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Loading ' + url),
duration: Duration(seconds: 1),
),
);
AppBar(
title: Text('New Title'),
);
});
return NavigationActionPolicy.ALLOW;
}
return NavigationActionPolicy.ALLOW;
},
),
);
}
}
```
在上面的代码中,我们使用一个名为`shouldOverrideUrlLoading`的回调来捕获Web视图中的任何导航,并检查URL是否包含`example.com`。如果是,则我们更新应用程序栏标题。我们使用`setState`方法来更新标题,并使用`ScaffoldMessenger`来显示一个短暂的消息,以通知用户正在加载新页面。
阅读全文