import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'main_test.dart'; import 'custom_widget_test.dart'; import '.env.dart'; class InAppWebViewAjaxTest extends WidgetTest { final InAppWebViewAjaxTestState state = InAppWebViewAjaxTestState(); @override InAppWebViewAjaxTestState createState() => state; } class InAppWebViewAjaxTestState extends WidgetTestState { String appBarTitle = "InAppWebViewAjaxTest"; int totTests = 2; int testsDone = 0; @override Widget build(BuildContext context) { return Scaffold( key: this.scaffoldKey, appBar: myAppBar(state: this, title: appBarTitle), drawer: myDrawer(context: context), body: Container( child: Column(children: [ Expanded( child: Container( child: InAppWebView( initialData: InAppWebViewInitialData(data: """ InAppWebViewAjaxTest

InAppWebViewAjaxTest

"""), initialHeaders: {}, initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions( clearCache: true, debuggingEnabled: true, useShouldInterceptAjaxRequest: true, ) ), onWebViewCreated: (InAppWebViewController controller) { webView = controller; }, onLoadStart: (InAppWebViewController controller, String url) { }, onLoadStop: (InAppWebViewController controller, String url) { }, shouldInterceptAjaxRequest: (InAppWebViewController controller, AjaxRequest ajaxRequest) async { if (ajaxRequest.url.endsWith("/test-ajax-post")) { ajaxRequest.responseType = 'json'; ajaxRequest.data = "firstname=Lorenzo&lastname=Pichilli"; } return ajaxRequest; }, onAjaxReadyStateChange: (InAppWebViewController controller, AjaxRequest ajaxRequest) async { if (ajaxRequest.readyState == AjaxRequestReadyState.DONE && ajaxRequest.status == 200 && ajaxRequest.url.endsWith("/test-ajax-post")) { Map res = ajaxRequest.response; appBarTitle = (appBarTitle == "InAppWebViewAjaxTest") ? res['fullname'] : appBarTitle + " " + res['fullname']; updateCountTest(context: context); } return AjaxRequestAction.PROCEED; }, onAjaxProgress: (InAppWebViewController controller, AjaxRequest ajaxRequest) async { if (ajaxRequest.event.type == AjaxRequestEventType.LOAD && ajaxRequest.url.endsWith("/test-ajax-post")) { Map res = ajaxRequest.response; appBarTitle = (appBarTitle == "InAppWebViewAjaxTest") ? res['fullname'] : appBarTitle + " " + res['fullname']; updateCountTest(context: context); } return AjaxRequestAction.PROCEED; }, ), ), ), ]) ) ); } void updateCountTest({@required BuildContext context}) { testsDone++; if (testsDone == totTests) { setState(() { }); } } }