import 'dart:convert'; 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 InAppWebViewFetchTest extends WidgetTest { final InAppWebViewFetchTestState state = InAppWebViewFetchTestState(); @override InAppWebViewFetchTestState createState() => state; } class InAppWebViewFetchTestState extends WidgetTestState { String appBarTitle = "InAppWebViewFetchTest"; 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: """ InAppWebViewFetchTest

InAppWebViewFetchTest

"""), initialHeaders: {}, initialOptions: InAppWebViewWidgetOptions( crossPlatform: InAppWebViewOptions( clearCache: true, debuggingEnabled: true, useShouldInterceptFetchRequest: true, ) ), onWebViewCreated: (InAppWebViewController controller) { webView = controller; webView.addJavaScriptHandler(handlerName: "fetchGet", callback: (args) { appBarTitle = (appBarTitle == "InAppWebViewFetchTest") ? args[0].toString() : appBarTitle + " " + args[0].toString(); updateCountTest(context: context); }); webView.addJavaScriptHandler(handlerName: "fetchPost", callback: (args) { appBarTitle = (appBarTitle == "InAppWebViewFetchTest") ? args[0]["fullname"] : appBarTitle + " " + args[0]["fullname"]; updateCountTest(context: context); }); }, onLoadStart: (InAppWebViewController controller, String url) { }, onLoadStop: (InAppWebViewController controller, String url) { }, shouldInterceptFetchRequest: (InAppWebViewController controller, FetchRequest fetchRequest) async { if (fetchRequest.url.endsWith("/test-ajax-post")) { fetchRequest.body = utf8.encode("""{ "firstname": "Lorenzo", "lastname": "Pichilli" } """); } return fetchRequest; }, ), ), ), ]) ) ); } void updateCountTest({@required BuildContext context}) { testsDone++; if (testsDone == totTests) { setState(() { }); } } }