From 858250960f7ca524c3fb3346fea3b824b3552aac Mon Sep 17 00:00:00 2001 From: wuuzw <29149346+wuuzw@users.noreply.github.com> Date: Tue, 9 Feb 2021 16:15:40 -0500 Subject: [PATCH] implement reload web content --- lib/app/modules/item/item_controller.dart | 5 --- lib/app/modules/item/item_controller.g.dart | 19 +------- lib/app/modules/item/item_module.dart | 2 + lib/app/modules/item/widgets/item_body.dart | 2 +- .../modules/item/widgets/item_bottom_bar.dart | 4 +- .../web_view_body.dart} | 11 ++--- .../web_view/web_view_body_controller.dart | 19 ++++++++ .../web_view/web_view_body_controller.g.dart | 44 +++++++++++++++++++ .../web_view_body_controller_test.dart | 25 +++++++++++ .../widgets/web_view/web_view_body_test.dart | 9 ++++ .../webview_stack/webview_stack_test.dart | 7 --- 11 files changed, 108 insertions(+), 39 deletions(-) rename lib/app/modules/item/widgets/{webview/webview_body.dart => web_view/web_view_body.dart} (84%) create mode 100644 lib/app/modules/item/widgets/web_view/web_view_body_controller.dart create mode 100644 lib/app/modules/item/widgets/web_view/web_view_body_controller.g.dart create mode 100644 test/app/modules/item/widgets/web_view/web_view_body_controller_test.dart create mode 100644 test/app/modules/item/widgets/web_view/web_view_body_test.dart delete mode 100644 test/app/modules/item/widgets/webview_stack/webview_stack_test.dart diff --git a/lib/app/modules/item/item_controller.dart b/lib/app/modules/item/item_controller.dart index c6d719c..2858e62 100644 --- a/lib/app/modules/item/item_controller.dart +++ b/lib/app/modules/item/item_controller.dart @@ -1,4 +1,3 @@ -import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:mobx/mobx.dart'; @@ -15,7 +14,6 @@ abstract class _ItemControllerBase with Store { final ItemRepository _repository; int _id; - InAppWebViewController webViewController; _ItemControllerBase(this._repository); @@ -25,9 +23,6 @@ abstract class _ItemControllerBase with Store { @observable bool isViewingComment = false; - @observable - bool isLoadingWebContent = false; - bool get hasWebContent => !itemFuture.value.domain.isNullOrEmpty(); @action diff --git a/lib/app/modules/item/item_controller.g.dart b/lib/app/modules/item/item_controller.g.dart index 605d901..dd8935c 100644 --- a/lib/app/modules/item/item_controller.g.dart +++ b/lib/app/modules/item/item_controller.g.dart @@ -50,22 +50,6 @@ mixin _$ItemController on _ItemControllerBase, Store { }); } - final _$isLoadingWebContentAtom = - Atom(name: '_ItemControllerBase.isLoadingWebContent'); - - @override - bool get isLoadingWebContent { - _$isLoadingWebContentAtom.reportRead(); - return super.isLoadingWebContent; - } - - @override - set isLoadingWebContent(bool value) { - _$isLoadingWebContentAtom.reportWrite(value, super.isLoadingWebContent, () { - super.isLoadingWebContent = value; - }); - } - final _$_ItemControllerBaseActionController = ActionController(name: '_ItemControllerBase'); @@ -106,8 +90,7 @@ mixin _$ItemController on _ItemControllerBase, Store { String toString() { return ''' itemFuture: ${itemFuture}, -isViewingComment: ${isViewingComment}, -isLoadingWebContent: ${isLoadingWebContent} +isViewingComment: ${isViewingComment} '''; } } diff --git a/lib/app/modules/item/item_module.dart b/lib/app/modules/item/item_module.dart index c2e70a2..4a014b5 100644 --- a/lib/app/modules/item/item_module.dart +++ b/lib/app/modules/item/item_module.dart @@ -1,4 +1,5 @@ import 'package:flutter_modular/flutter_modular.dart'; +import 'package:zone/app/modules/item/widgets/web_view/web_view_body_controller.dart'; import 'item_controller.dart'; import 'item_page.dart'; @@ -7,6 +8,7 @@ import 'repository/item_repository.dart'; class ItemModule extends ChildModule { @override List get binds => [ + $WebViewBodyController, $ItemController, $ItemRepository, ]; diff --git a/lib/app/modules/item/widgets/item_body.dart b/lib/app/modules/item/widgets/item_body.dart index 4907014..f92b38a 100644 --- a/lib/app/modules/item/widgets/item_body.dart +++ b/lib/app/modules/item/widgets/item_body.dart @@ -7,7 +7,7 @@ import '../../../shared/widgets/error_indicator.dart'; import '../../../shared/widgets/loading_indicator.dart'; import '../item_controller.dart'; import 'comment_view/comment_view_body.dart'; -import 'webview/webview_body.dart'; +import 'web_view/web_view_body.dart'; class ItemBody extends StatelessWidget { final ItemController controller = Modular.get(); diff --git a/lib/app/modules/item/widgets/item_bottom_bar.dart b/lib/app/modules/item/widgets/item_bottom_bar.dart index afb1b57..6ad7f88 100644 --- a/lib/app/modules/item/widgets/item_bottom_bar.dart +++ b/lib/app/modules/item/widgets/item_bottom_bar.dart @@ -7,11 +7,13 @@ import '../../../service/share_service.dart'; import '../../../service/url_launch_service.dart'; import '../../../shared/constants/dimens.dart'; import '../item_controller.dart'; +import 'web_view/web_view_body_controller.dart'; class ItemBottomBar extends StatelessWidget { final ItemController controller = Modular.get(); final ShareService shareService = Modular.get(); final UrlLaunchService urlLaunchService = Modular.get(); + final WebViewBodyController webViewBodyController = Modular.get(); @override Widget build(BuildContext context) { @@ -31,7 +33,7 @@ class ItemBottomBar extends StatelessWidget { icon: Icon(MdiIcons.refresh), tooltip: 'Reload current page', onPressed: () { - //_webViewKey.currentState?.reload(); + webViewBodyController.reload(); }, ), Spacer(), diff --git a/lib/app/modules/item/widgets/webview/webview_body.dart b/lib/app/modules/item/widgets/web_view/web_view_body.dart similarity index 84% rename from lib/app/modules/item/widgets/webview/webview_body.dart rename to lib/app/modules/item/widgets/web_view/web_view_body.dart index c9d0c00..d65c198 100644 --- a/lib/app/modules/item/widgets/webview/webview_body.dart +++ b/lib/app/modules/item/widgets/web_view/web_view_body.dart @@ -3,11 +3,12 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_modular/flutter_modular.dart'; -import '../../item_controller.dart'; +import 'web_view_body_controller.dart'; class WebViewBody extends StatelessWidget { + final WebViewBodyController controller = Modular.get(); + final String url; - final ItemController controller = Modular.get(); WebViewBody({Key key, this.url}) : super(key: key); @@ -18,7 +19,7 @@ class WebViewBody extends StatelessWidget { return Stack( children: [ InAppWebView( - initialUrl: controller.itemFuture.value.url, + initialUrl: url, initialOptions: InAppWebViewGroupOptions( android: AndroidInAppWebViewOptions( forceDark: AndroidForceDark.FORCE_DARK_ON, @@ -40,8 +41,4 @@ class WebViewBody extends StatelessWidget { }, ); } - - void reload() { - controller.webViewController?.reload(); - } } diff --git a/lib/app/modules/item/widgets/web_view/web_view_body_controller.dart b/lib/app/modules/item/widgets/web_view/web_view_body_controller.dart new file mode 100644 index 0000000..a319fe9 --- /dev/null +++ b/lib/app/modules/item/widgets/web_view/web_view_body_controller.dart @@ -0,0 +1,19 @@ +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:flutter_modular/flutter_modular.dart'; +import 'package:mobx/mobx.dart'; + +part 'web_view_body_controller.g.dart'; + +@Injectable() +class WebViewBodyController = _WebViewBodyControllerBase with _$WebViewBodyController; + +abstract class _WebViewBodyControllerBase with Store { + InAppWebViewController webViewController; + + @observable + bool isLoadingWebContent = false; + + void reload() { + webViewController?.reload(); + } +} diff --git a/lib/app/modules/item/widgets/web_view/web_view_body_controller.g.dart b/lib/app/modules/item/widgets/web_view/web_view_body_controller.g.dart new file mode 100644 index 0000000..1058e82 --- /dev/null +++ b/lib/app/modules/item/widgets/web_view/web_view_body_controller.g.dart @@ -0,0 +1,44 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'web_view_body_controller.dart'; + +// ************************************************************************** +// InjectionGenerator +// ************************************************************************** + +final $WebViewBodyController = BindInject( + (i) => WebViewBodyController(), + singleton: true, + lazy: true, +); + +// ************************************************************************** +// StoreGenerator +// ************************************************************************** + +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic + +mixin _$WebViewBodyController on _WebViewBodyControllerBase, Store { + final _$isLoadingWebContentAtom = + Atom(name: '_WebViewBodyControllerBase.isLoadingWebContent'); + + @override + bool get isLoadingWebContent { + _$isLoadingWebContentAtom.reportRead(); + return super.isLoadingWebContent; + } + + @override + set isLoadingWebContent(bool value) { + _$isLoadingWebContentAtom.reportWrite(value, super.isLoadingWebContent, () { + super.isLoadingWebContent = value; + }); + } + + @override + String toString() { + return ''' +isLoadingWebContent: ${isLoadingWebContent} + '''; + } +} diff --git a/test/app/modules/item/widgets/web_view/web_view_body_controller_test.dart b/test/app/modules/item/widgets/web_view/web_view_body_controller_test.dart new file mode 100644 index 0000000..852f82c --- /dev/null +++ b/test/app/modules/item/widgets/web_view/web_view_body_controller_test.dart @@ -0,0 +1,25 @@ +import 'package:flutter_modular/flutter_modular_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:zone/app/modules/item/item_module.dart'; +import 'package:zone/app/modules/item/widgets/web_view/web_view_body_controller.dart'; + +void main() { + initModule(ItemModule()); + WebViewBodyController webviewbody; + // + setUp(() { + // webviewbody = ItemModule.to.get(); + }); + + group('WebViewBodyController Test', () { + // test("First Test", () { + // expect(webviewbody, isInstanceOf()); + // }); + + // test("Set Value", () { + // expect(webviewbody.value, equals(0)); + // webviewbody.increment(); + // expect(webviewbody.value, equals(1)); + // }); + }); +} diff --git a/test/app/modules/item/widgets/web_view/web_view_body_test.dart b/test/app/modules/item/widgets/web_view/web_view_body_test.dart new file mode 100644 index 0000000..39379d5 --- /dev/null +++ b/test/app/modules/item/widgets/web_view/web_view_body_test.dart @@ -0,0 +1,9 @@ +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('WebViewBody has message', (tester) async { + // await tester.pumpWidget(buildTestableWidget(WebViewBody())); + // final textFinder = find.text('WebViewBody'); + // expect(textFinder, findsOneWidget); + }); +} diff --git a/test/app/modules/item/widgets/webview_stack/webview_stack_test.dart b/test/app/modules/item/widgets/webview_stack/webview_stack_test.dart deleted file mode 100644 index 4792505..0000000 --- a/test/app/modules/item/widgets/webview_stack/webview_stack_test.dart +++ /dev/null @@ -1,7 +0,0 @@ -void main() { -// testWidgets('WebviewContainerWidget has message', (tester) async { -// await tester.pumpWidget(buildTestableWidget(WebviewContainerWidget())); -// final textFinder = find.text('WebviewContainer'); -// expect(textFinder, findsOneWidget); -// }); -}