From 3e459865a1fd70aadb16e50f8edd6847e5b6d1ce Mon Sep 17 00:00:00 2001 From: Jing <42014615+jing332@users.noreply.github.com> Date: Tue, 16 Jan 2024 15:38:46 +0800 Subject: [PATCH] Web back handle --- lib/main.dart | 20 ++++++++++++- lib/pages/alist/alist.dart | 5 ++-- lib/pages/web/web.dart | 61 ++++++++++++++------------------------ 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index cdea469..1be0c59 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:alist_flutter/pages/alist/alist.dart'; import 'package:alist_flutter/pages/app_update_dialog.dart'; import 'package:alist_flutter/pages/settings/settings.dart'; @@ -93,7 +95,7 @@ class _MyHomePageState extends State { itemBuilder: (context, index) { return [ const AListScreen(), - const WebScreen(), + WebScreen(key: webGlobalKey), const SettingsScreen() ][index]; }, @@ -110,6 +112,12 @@ class _MyHomePageState extends State { destinations: AppRouter.destinations, selectedIndex: _selectedIndex, onDestinationSelected: (int index) { + log(index.toString()); + // Web + if (_selectedIndex == 1 && index == 1) { + webGlobalKey.currentState?.onClickNavigationBar(); + } + setState(() { _selectedIndex = index; }); @@ -121,3 +129,13 @@ class _MyHomePageState extends State { ); } } + +class NavigationBarController extends GetxController { + final _selectedIndex = 0.obs; + + int get selectedIndex => _selectedIndex.value; + + void setIndex(int index) { + _selectedIndex.value = index; + } +} diff --git a/lib/pages/alist/alist.dart b/lib/pages/alist/alist.dart index 69aaabc..b4363e0 100644 --- a/lib/pages/alist/alist.dart +++ b/lib/pages/alist/alist.dart @@ -51,9 +51,9 @@ class AListScreen extends StatelessWidget { onTap: () async { AppUpdateDialog.checkUpdateAndShowDialog(context, (b) { if (!b) { - Get.showSnackbar(GetSnackBar( + Get.showSnackbar(const GetSnackBar( message: "已经是最新版本", - duration: const Duration(seconds: 2))); + duration: Duration(seconds: 2))); } }); }, @@ -145,6 +145,7 @@ class AListController extends GetxController { Event.setup(MyEventReceiver( (isRunning) => isSwitch.value = isRunning, (log) => addLog(log))); Android().getAListVersion().then((value) => alistVersion.value = value); + Android().isRunning().then((value) => isSwitch.value = value); super.onInit(); } diff --git a/lib/pages/web/web.dart b/lib/pages/web/web.dart index d0b390e..edd8db4 100644 --- a/lib/pages/web/web.dart +++ b/lib/pages/web/web.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:alist_flutter/generated_api.dart'; import 'package:alist_flutter/utils/intent_utils.dart'; import 'package:android_intent_plus/android_intent.dart'; @@ -6,19 +8,27 @@ import 'package:flutter/services.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:get/get.dart'; +GlobalKey webGlobalKey = GlobalKey(); + class WebScreen extends StatefulWidget { const WebScreen({Key? key}) : super(key: key); @override State createState() { - return _WebScreenState(); + return WebScreenState(); } } -class _WebScreenState extends State { +class WebScreenState extends State { InAppWebViewController? _webViewController; double _progress = 0; String _url = "http://localhost:5244"; + bool _canGoBack = false; + + onClickNavigationBar() { + log("onClickNavigationBar"); + _webViewController?.reload(); + } @override void initState() { @@ -31,10 +41,12 @@ class _WebScreenState extends State { @override Widget build(BuildContext context) { return PopScope( - onPopInvoked: (b) { - _webViewController?.canGoBack().then((value) => { - if (value) {_webViewController?.goBack()} else {Get.back()} - }); + canPop: !_canGoBack, + onPopInvoked: (didPop) async { + log("onPopInvoked $didPop"); + if (didPop) return; + + _webViewController?.goBack(); }, child: Scaffold( body: Column(children: [ @@ -51,7 +63,7 @@ class _WebScreenState extends State { _webViewController = controller; }, onLoadStart: (InAppWebViewController controller, Uri? url) { - setState(() { + setState(() async { _progress = 0; }); }, @@ -121,41 +133,12 @@ class _WebScreenState extends State { _progress = progress / 100; if (_progress == 1) _progress = 0; }); + controller.canGoBack().then((value) => setState(() { + _canGoBack = value; + })); }, ), ), - ButtonBar( - alignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - child: const Icon(Icons.arrow_back), - onPressed: () { - if (_webViewController != null) { - _webViewController!.goBack(); - } - }, - ), - ElevatedButton( - child: const Icon(Icons.arrow_forward), - onPressed: () { - if (_webViewController != null) { - _webViewController!.goForward(); - } - }, - ), - ElevatedButton( - child: const Icon(Icons.refresh), - onPressed: () { - if (_webViewController != null) { - _webViewController!.reload(); - } - _webViewController!.loadUrl( - urlRequest: - URLRequest(url: WebUri("http://coolapk.com"))); - }, - ), - ], - ), ]), )); }