Android 使用RocketChat时无法在Flatter Webview中检测页面导航
我正在使用webview从我的Flatter应用程序中加载一个自托管火箭聊天应用程序。到目前为止,我能够正确加载所有内容。现在,我需要检测用户的配置文件何时被访问并显示提示 e、 g.当user1单击messages部分中的user2时,我应该能够在Flatter应用程序中显示alertbox 在web浏览器中,执行此操作时,URL将更改为。我试图检测此URL何时被打开以执行某些操作,但目前为止没有运气。 这是我的密码:Android 使用RocketChat时无法在Flatter Webview中检测页面导航,android,flutter,webview,rocket.chat,Android,Flutter,Webview,Rocket.chat,我正在使用webview从我的Flatter应用程序中加载一个自托管火箭聊天应用程序。到目前为止,我能够正确加载所有内容。现在,我需要检测用户的配置文件何时被访问并显示提示 e、 g.当user1单击messages部分中的user2时,我应该能够在Flatter应用程序中显示alertbox 在web浏览器中,执行此操作时,URL将更改为。我试图检测此URL何时被打开以执行某些操作,但目前为止没有运气。 这是我的密码: class _WebViewExampleState extends St
class _WebViewExampleState extends State<WebViewExample> {
String loadUrl = 'https://chat.domain.com';
@override
Widget build(BuildContext context) {
Completer<WebViewController> _controller = Completer<WebViewController>();
return Scaffold(
appBar: AppBar(
title: Text('Webview App'),
backgroundColor: Colors.black,
),
body: Builder(builder: (BuildContext context) {
return Container(
padding: EdgeInsets.only(bottom: 20.0),
child: GestureDetector(
child: Expanded(
child: WebView(
initialUrl: loadUrl,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
navigationDelegate: (NavigationRequest request) {
print('request url: ' + request.url);
//even the above print statement is not getting executed when user performs some action
if (request.url.startsWith('https://chat.domain.com/direct/')) {
String convId = request.url.replaceAll('https://chat.domain.com/direct/', '');
//alert here
//URL in the browser changes for this user action
} else if (request.url.startsWith('https://chat.domain.com/api/v1/method.call/sendMessage')) {
//the above url is called when a user sends a message, but this happens in the background.
//URL in the browser remains the same for this user action.
//display some alert
}
print('allowing navigation to $request');
return NavigationDecision.navigate;
},
onPageStarted: (String url) {
print('Page started loading: $url');
},
onPageFinished: (String url) {
print('Page finished loading: $url');
},
gestureNavigationEnabled: true,
),
),
),
);
}),
);
}
}
class\u WebViewExampleState扩展状态{
字符串loadUrl=https://chat.domain.com';
@凌驾
小部件生成(BuildContext上下文){
Completer _controller=Completer();
返回脚手架(
appBar:appBar(
标题:文本(“Webview应用程序”),
背景颜色:Colors.black,
),
主体:生成器(生成器:(BuildContext上下文){
返回容器(
填充:仅限边缘设置(底部:20.0),
儿童:手势检测器(
儿童:扩大(
孩子:网络视图(
initialUrl:loadUrl,
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
_控制器。完成(webViewController);
},
navigationDelegate:(NavigationRequest请求){
打印('请求url:'+请求.url);
//当用户执行某些操作时,甚至上面的print语句也不会执行
if(request.url.startsWith('https://chat.domain.com/direct/')) {
String convId=request.url.replaceAll('https://chat.domain.com/direct/', '');
//警惕这里
//浏览器中的URL将更改此用户操作
}else if(request.url.startsWith('https://chat.domain.com/api/v1/method.call/sendMessage')) {
//当用户发送消息时,会调用上面的url,但这是在后台发生的。
//浏览器中的URL对此用户操作保持不变。
//显示一些警报
}
打印(“允许导航到$request”);
返回NavigationDecision.navigate;
},
onPageStarted:(字符串url){
打印('页面已开始加载:$url');
},
onPageFinished:(字符串url){
打印('Page finished loading:$url');
},
gestureNavigationEnabled:正确,
),
),
),
);
}),
);
}
}
我目前正在使用此插件:webview\u flatter:^0.3.22+1。我已经尝试过其他webview插件,但没有一个能够解决我的问题
我正在考虑监控应用程序发出的URL调用,并在此基础上触发一些操作,但我不知道如何在flutter中实现这一点
任何帮助都将不胜感激