From f940b3ccdd722b5c8571a4d9a4227a02c4cb6151 Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Wed, 12 Jun 2024 17:40:57 +0400 Subject: [PATCH 01/10] feat: Add host and isHttp fields to the browser controller. --- .../lib/webview_controls/page_controls.dart | 28 ++++++++++++++++--- .../lib/src/browser_controller.dart | 16 +++++++++++ .../lib/src/customized_web_view.dart | 5 ++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/packages/ada_chat_flutter/example/lib/webview_controls/page_controls.dart b/packages/ada_chat_flutter/example/lib/webview_controls/page_controls.dart index c90df505..5021db68 100644 --- a/packages/ada_chat_flutter/example/lib/webview_controls/page_controls.dart +++ b/packages/ada_chat_flutter/example/lib/webview_controls/page_controls.dart @@ -56,10 +56,30 @@ class _PageControlsState extends State { onPressed: widget.controller.reload, ), Expanded( - child: Text( - widget.controller.title, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.bodySmall, + child: Column( + children: [ + Text( + widget.controller.title, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.bodySmall, + ), + Row( + children: [ + Icon( + widget.controller.isHttps + ? Icons.lock + : Icons.lock_open, + size: 10, + ), + const SizedBox(width: 8), + Text( + widget.controller.host, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.bodyMedium, + ), + ], + ), + ], ), ), IconButton( diff --git a/packages/ada_chat_flutter/lib/src/browser_controller.dart b/packages/ada_chat_flutter/lib/src/browser_controller.dart index 5443a942..f5f49485 100644 --- a/packages/ada_chat_flutter/lib/src/browser_controller.dart +++ b/packages/ada_chat_flutter/lib/src/browser_controller.dart @@ -4,6 +4,8 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class BrowserController extends ChangeNotifier { InAppWebViewController? _controller; String _title = ''; + String _host = ''; + bool _isHttps = true; bool _backIsAvailable = false; bool _forwardIsAvailable = false; @@ -22,6 +24,20 @@ class BrowserController extends ChangeNotifier { notifyListeners(); } + String get host => _host; + + void setHost(String host) { + _host = host; + notifyListeners(); + } + + bool get isHttps => _isHttps; + + void setIsHttps(bool isHttps) { + _isHttps = isHttps; + notifyListeners(); + } + bool get backIsAvailable => _backIsAvailable; void setBackIsAvailable(bool isAvailable) { diff --git a/packages/ada_chat_flutter/lib/src/customized_web_view.dart b/packages/ada_chat_flutter/lib/src/customized_web_view.dart index 75f8bf74..d1fffc3f 100644 --- a/packages/ada_chat_flutter/lib/src/customized_web_view.dart +++ b/packages/ada_chat_flutter/lib/src/customized_web_view.dart @@ -51,6 +51,11 @@ class _CustomizedWebViewState extends State { final title = await webViewController.getTitle(); widget.browserSettings?.control?.setTitle(title ?? ''); + final webUri = await webViewController.getUrl(); + widget.browserSettings?.control?.setHost(webUri?.host ?? ''); + widget.browserSettings?.control + ?.setIsHttps(webUri?.isScheme('https') ?? false); + final canGoBack = await webViewController.canGoBack(); widget.browserSettings?.control?.setBackIsAvailable(canGoBack); From 2689174165a510aeb149f7fee2f1f3aca4c5296d Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Wed, 12 Jun 2024 17:48:53 +0400 Subject: [PATCH 02/10] test: Add BrowserController tests --- .../test/src/browser_controller_test.dart | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/ada_chat_flutter/test/src/browser_controller_test.dart b/packages/ada_chat_flutter/test/src/browser_controller_test.dart index 2b4e5173..19f63034 100644 --- a/packages/ada_chat_flutter/test/src/browser_controller_test.dart +++ b/packages/ada_chat_flutter/test/src/browser_controller_test.dart @@ -42,6 +42,19 @@ void main() { expect(browserController.title, newTitle); }); + test('host getter returns correct value', () { + const newHost = 'New Host'; + browserController.setHost(newHost); + expect(browserController.host, newHost); + }); + + test('isHttps getter returns correct value', () { + browserController.setIsHttps(false); + expect(browserController.isHttps, false); + browserController.setIsHttps(true); + expect(browserController.isHttps, true); + }); + test('backIsAvailable getter returns correct value', () { browserController.setBackIsAvailable(true); expect(browserController.backIsAvailable, true); @@ -57,10 +70,12 @@ void main() { browserController.addListener(() => listenerCallCount++); browserController.setTitle('New Title'); + browserController.setHost('New Host'); + browserController.setIsHttps(false); browserController.setBackIsAvailable(true); browserController.setForwardIsAvailable(false); - expect(listenerCallCount, 3); + expect(listenerCallCount, 5); }); }); } From 07f7a7f97aa9a6813f107931ec1c321522c7fad5 Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Wed, 12 Jun 2024 18:29:09 +0400 Subject: [PATCH 03/10] ci: v0.0.4 --- packages/ada_chat_flutter/CHANGELOG.md | 4 ++++ packages/ada_chat_flutter/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/ada_chat_flutter/CHANGELOG.md b/packages/ada_chat_flutter/CHANGELOG.md index 83b1aa0d..6443e67e 100644 --- a/packages/ada_chat_flutter/CHANGELOG.md +++ b/packages/ada_chat_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4 + +- Add host and isHttp fields to the browser controller. + ## 0.0.3 - Add browserSettings with webview page builder. diff --git a/packages/ada_chat_flutter/pubspec.yaml b/packages/ada_chat_flutter/pubspec.yaml index cca7ab93..1ceed81a 100644 --- a/packages/ada_chat_flutter/pubspec.yaml +++ b/packages/ada_chat_flutter/pubspec.yaml @@ -1,6 +1,6 @@ name: ada_chat_flutter description: Flutter implementation of Ada chat -version: 0.0.3 +version: 0.0.4 environment: sdk: '>=3.0.0 <4.0.0' From 9463576f0e388ebda25d9a5c8dde06e70f19c857 Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Wed, 12 Jun 2024 19:27:00 +0400 Subject: [PATCH 04/10] fix: Webview's dialog background --- packages/ada_chat_flutter/lib/src/ada_web_view.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ada_chat_flutter/lib/src/ada_web_view.dart b/packages/ada_chat_flutter/lib/src/ada_web_view.dart index 5d90d3cb..e5f47d85 100644 --- a/packages/ada_chat_flutter/lib/src/ada_web_view.dart +++ b/packages/ada_chat_flutter/lib/src/ada_web_view.dart @@ -310,6 +310,7 @@ console.log("adaSettings: " + JSON.stringify(window.adaSettings)); unawaited( showDialog( context: context, + barrierColor: Colors.transparent, builder: (context) => CustomizedWebView( url: url, browserSettings: widget.browserSettings, From c2f79369c775f73c4dabaf5e0169bbdbb243b56e Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Wed, 12 Jun 2024 19:34:40 +0400 Subject: [PATCH 05/10] wip: Fix color --- packages/ada_chat_flutter/lib/src/ada_web_view.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ada_chat_flutter/lib/src/ada_web_view.dart b/packages/ada_chat_flutter/lib/src/ada_web_view.dart index e5f47d85..98a72774 100644 --- a/packages/ada_chat_flutter/lib/src/ada_web_view.dart +++ b/packages/ada_chat_flutter/lib/src/ada_web_view.dart @@ -310,7 +310,7 @@ console.log("adaSettings: " + JSON.stringify(window.adaSettings)); unawaited( showDialog( context: context, - barrierColor: Colors.transparent, + barrierColor: Colors.white70, builder: (context) => CustomizedWebView( url: url, browserSettings: widget.browserSettings, From d524f6098bac89ee71ffbc0fdac80aa9fb33a4fd Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Wed, 12 Jun 2024 19:42:35 +0400 Subject: [PATCH 06/10] wip: Background color is ignored on iOS. Trying showAdaptiveDialog --- packages/ada_chat_flutter/lib/src/ada_web_view.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ada_chat_flutter/lib/src/ada_web_view.dart b/packages/ada_chat_flutter/lib/src/ada_web_view.dart index 98a72774..f2f2a35a 100644 --- a/packages/ada_chat_flutter/lib/src/ada_web_view.dart +++ b/packages/ada_chat_flutter/lib/src/ada_web_view.dart @@ -308,9 +308,9 @@ console.log("adaSettings: " + JSON.stringify(window.adaSettings)); } unawaited( - showDialog( + showAdaptiveDialog( context: context, - barrierColor: Colors.white70, + barrierColor: Colors.transparent, builder: (context) => CustomizedWebView( url: url, browserSettings: widget.browserSettings, From efcc5b5a988c63171ca00f7c3593cf27d6ccf3c4 Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Thu, 13 Jun 2024 18:32:57 +0400 Subject: [PATCH 07/10] fix: Make example closer to a real HS app - disable Material3 theme. --- packages/ada_chat_flutter/example/lib/main.dart | 3 +++ packages/ada_chat_flutter/lib/src/ada_web_view.dart | 10 +++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/ada_chat_flutter/example/lib/main.dart b/packages/ada_chat_flutter/example/lib/main.dart index 8e7da4e7..51f96ebe 100644 --- a/packages/ada_chat_flutter/example/lib/main.dart +++ b/packages/ada_chat_flutter/example/lib/main.dart @@ -13,6 +13,9 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) => MaterialApp( + theme: ThemeData.light(useMaterial3: false), + darkTheme: ThemeData.dark(useMaterial3: false), + themeMode: ThemeMode.system, onGenerateRoute: (route) { switch (route.name) { case '/ada': diff --git a/packages/ada_chat_flutter/lib/src/ada_web_view.dart b/packages/ada_chat_flutter/lib/src/ada_web_view.dart index f2f2a35a..88fdf046 100644 --- a/packages/ada_chat_flutter/lib/src/ada_web_view.dart +++ b/packages/ada_chat_flutter/lib/src/ada_web_view.dart @@ -311,9 +311,13 @@ console.log("adaSettings: " + JSON.stringify(window.adaSettings)); showAdaptiveDialog( context: context, barrierColor: Colors.transparent, - builder: (context) => CustomizedWebView( - url: url, - browserSettings: widget.browserSettings, + builder: (context) => SafeArea( + child: Scaffold( + body: CustomizedWebView( + url: url, + browserSettings: widget.browserSettings, + ), + ), ), useRootNavigator: false, ), From 0f48cb065aa8e8149401a9a723974220b017980d Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Thu, 13 Jun 2024 19:00:27 +0400 Subject: [PATCH 08/10] fix: Return more flexible variant without SafeArea and Scaffold --- packages/ada_chat_flutter/lib/src/ada_web_view.dart | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/ada_chat_flutter/lib/src/ada_web_view.dart b/packages/ada_chat_flutter/lib/src/ada_web_view.dart index 88fdf046..f2f2a35a 100644 --- a/packages/ada_chat_flutter/lib/src/ada_web_view.dart +++ b/packages/ada_chat_flutter/lib/src/ada_web_view.dart @@ -311,13 +311,9 @@ console.log("adaSettings: " + JSON.stringify(window.adaSettings)); showAdaptiveDialog( context: context, barrierColor: Colors.transparent, - builder: (context) => SafeArea( - child: Scaffold( - body: CustomizedWebView( - url: url, - browserSettings: widget.browserSettings, - ), - ), + builder: (context) => CustomizedWebView( + url: url, + browserSettings: widget.browserSettings, ), useRootNavigator: false, ), From e0418ad5bb93d4c0dbbf0914c3abdf4726c8bf96 Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Thu, 13 Jun 2024 19:06:51 +0400 Subject: [PATCH 09/10] fix: Add SafeArea and Scaffold to AdaChatScreen --- .../example/lib/screens/ada_chat_screen.dart | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/ada_chat_flutter/example/lib/screens/ada_chat_screen.dart b/packages/ada_chat_flutter/example/lib/screens/ada_chat_screen.dart index 3a57c408..f3e15daa 100644 --- a/packages/ada_chat_flutter/example/lib/screens/ada_chat_screen.dart +++ b/packages/ada_chat_flutter/example/lib/screens/ada_chat_screen.dart @@ -62,10 +62,13 @@ class _AdaChatScreenState extends State { setState(() => _progress = 0); }, browserSettings: BrowserSettings( - pageBuilder: (context, browser, controller) => - PageWithControls( - controller: controller, - child: browser, + pageBuilder: (context, browser, controller) => Scaffold( + body: SafeArea( + child: PageWithControls( + controller: controller, + child: browser, + ), + ), ), ), onLoaded: (data) => From f80acf49d2fdac896dc91d4cd7a304cf48d93813 Mon Sep 17 00:00:00 2001 From: slava-r-epam Date: Thu, 13 Jun 2024 19:24:53 +0400 Subject: [PATCH 10/10] fix: Implement HS colors for the themes --- packages/ada_chat_flutter/example/lib/main.dart | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/ada_chat_flutter/example/lib/main.dart b/packages/ada_chat_flutter/example/lib/main.dart index 51f96ebe..35c63144 100644 --- a/packages/ada_chat_flutter/example/lib/main.dart +++ b/packages/ada_chat_flutter/example/lib/main.dart @@ -13,8 +13,17 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) => MaterialApp( - theme: ThemeData.light(useMaterial3: false), - darkTheme: ThemeData.dark(useMaterial3: false), + theme: ThemeData.from( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.orange), + useMaterial3: false, + ), + darkTheme: ThemeData.from( + colorScheme: ColorScheme.fromSwatch( + primarySwatch: Colors.orange, + brightness: Brightness.dark, + ), + useMaterial3: false, + ), themeMode: ThemeMode.system, onGenerateRoute: (route) { switch (route.name) {