diff --git a/lib/provider/web_provider.dart b/lib/provider/web_provider.dart index dd37e8d..2e49cee 100644 --- a/lib/provider/web_provider.dart +++ b/lib/provider/web_provider.dart @@ -54,6 +54,7 @@ class WebProvider extends ChangeNotifier { void goHome(WebInfo webInfo) { webInfo.url = ""; webInfo.title = null; + webInfo.controller = null; updateWebInfo(webInfo); } diff --git a/lib/router/index/index_router.dart b/lib/router/index/index_router.dart index e0522db..acdcda4 100644 --- a/lib/router/index/index_router.dart +++ b/lib/router/index/index_router.dart @@ -9,6 +9,7 @@ import 'package:provider/provider.dart'; import '../../component/webview/webview_component.dart'; import '../../provider/android_signer_mixin.dart'; import '../../provider/permission_check_mixin.dart'; +import 'web_control_component.dart'; class IndexRouter extends StatefulWidget { @override @@ -19,6 +20,8 @@ class IndexRouter extends StatefulWidget { class _IndexRouter extends CustState with PermissionCheckMixin, AndroidSignerMixin { + final GlobalKey _scaffoldKey = new GlobalKey(); + Map webViewComponentMap = {}; @override @@ -41,7 +44,7 @@ class _IndexRouter extends CustState builder: (context, webNumInfo, child) { List list = []; for (var i = 0; i < webNumInfo.length; i++) { - list.add(IndexWebComponent(i)); + list.add(IndexWebComponent(i, showControl)); } return IndexedStack( index: webNumInfo.index, @@ -54,14 +57,44 @@ class _IndexRouter extends CustState return PopScope( canPop: false, onPopInvoked: (didPop) async { + var closeBottomSheet = closeControl(); + if (closeBottomSheet) { + return; + } + var webInfo = webProvider.currentWebInfo(); if (webInfo != null) { webProvider.goBack(webInfo); } }, child: Scaffold( + key: _scaffoldKey, body: main, ), ); } + + PersistentBottomSheetController? bottomSheetController; + + showControl() { + bottomSheetController = _scaffoldKey.currentState!.showBottomSheet( + (context) { + return WebControlComponent(); + }, + enableDrag: true, + showDragHandle: true, + ); + } + + bool closeControl() { + bool closeAble = false; + try { + if (bottomSheetController != null) { + bottomSheetController!.close(); + closeAble = true; + } + } catch (e) {} + bottomSheetController = null; + return closeAble; + } } diff --git a/lib/router/index/index_web_component.dart b/lib/router/index/index_web_component.dart index 16e9038..6215bf8 100644 --- a/lib/router/index/index_web_component.dart +++ b/lib/router/index/index_web_component.dart @@ -17,7 +17,9 @@ import 'web_control_component.dart'; class IndexWebComponent extends StatefulWidget { int index; - IndexWebComponent(this.index); + Function showControl; + + IndexWebComponent(this.index, this.showControl); @override State createState() { @@ -130,8 +132,9 @@ class _IndexWebComponent extends State { ), ), ), - wrapBottomBtn(const Icon(Icons.space_dashboard), - onTap: showControl, left: 8, right: 8), + wrapBottomBtn(const Icon(Icons.space_dashboard), onTap: () { + widget.showControl(); + }, left: 8, right: 8), wrapBottomBtn(const Icon(Icons.segment), left: 8, right: 13, onTap: () { RouterUtil.router(context, RouterPath.ME); @@ -166,14 +169,4 @@ class _IndexWebComponent extends State { ), ); } - - showControl() { - showBottomSheet( - context: context, - showDragHandle: true, - builder: (context) { - return WebControlComponent(); - }, - ); - } }