import 'package:flutter/material.dart'; import 'package:nostr_sdk/utils/platform_util.dart'; import 'package:nowser/component/cust_state.dart'; import 'package:nowser/main.dart'; import 'package:nowser/provider/web_provider.dart'; import 'package:nowser/router/index/index_web_component.dart'; import 'package:nowser/util/router_util.dart'; 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 State createState() { return _IndexRouter(); } } class _IndexRouter extends CustState with PermissionCheckMixin, AndroidSignerMixin { final GlobalKey _scaffoldKey = new GlobalKey(); Map webViewComponentMap = {}; @override Future onReady(BuildContext context) async { await remoteSigningProvider.reload(); await remoteSigningProvider.reloadPenddingRemoteApps(); } @override Widget doBuild(BuildContext context) { if (PlatformUtil.isAndroid()) { WidgetsBinding.instance.addPostFrameCallback((_) { handleInitialIntent(context); }); } remoteSigningProvider.updateContext(context); webProvider.checkBlank(); var main = Selector( builder: (context, webNumInfo, child) { List list = []; for (var i = 0; i < webNumInfo.length; i++) { list.add(IndexWebComponent(i, showControl)); } return IndexedStack( index: webNumInfo.index, children: list, ); }, selector: (context, provider) { return provider.getWebNumInfo(); }); 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, ); bottomSheetController!.closed.then((v) { bottomSheetController = null; }); } bool closeControl() { bool closeAble = false; try { if (bottomSheetController != null) { // bottomSheetController!.close(); closeAble = true; RouterUtil.back(context); } } catch (e) { print(e); } bottomSheetController = null; return closeAble; } }