diff --git a/lib/controllers/extension_controller.dart b/lib/controllers/extension_controller.dart index 42709f23..a79aaae2 100644 --- a/lib/controllers/extension_controller.dart +++ b/lib/controllers/extension_controller.dart @@ -6,6 +6,8 @@ class ExtensionPageController extends GetxController { RxMap runtimes = {}.obs; RxMap errors = {}.obs; RxBool isInstallloading = false.obs; + bool needRefresh = true; + bool isPageOpen = false; @override void onInit() { @@ -19,4 +21,12 @@ class ExtensionPageController extends GetxController { runtimes.addAll(ExtensionUtils.runtimes); errors.addAll(ExtensionUtils.extensionErrorMap); } + + callRefresh() { + if (isPageOpen) { + onRefresh(); + } else { + needRefresh = true; + } + } } diff --git a/lib/controllers/search_controller.dart b/lib/controllers/search_controller.dart index c99fcf32..db359951 100644 --- a/lib/controllers/search_controller.dart +++ b/lib/controllers/search_controller.dart @@ -12,6 +12,8 @@ class SearchPageController extends GetxController { int get finishCount => searchResultList.where((element) => element.completed).length; bool needRefresh = true; + bool isPageOpen = false; + // 是否打开了这个页面 @override void onInit() { @@ -89,6 +91,14 @@ class SearchPageController extends GetxController { getPackgeByIndex(int index) { return searchResultList[index].runitme.extension.package; } + + callRefresh() { + if (isPageOpen) { + getRuntime(); + } else { + needRefresh = true; + } + } } class SearchResult { diff --git a/lib/main.dart b/lib/main.dart index f1483b15..3441fb4b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -44,8 +44,8 @@ void main(List args) async { // 主窗口 await MiruStorage.ensureInitialized(); - await ExtensionUtils.ensureInitialized(); await ApplicationUtils.ensureInitialized(); + ExtensionUtils.ensureInitialized(); MediaKit.ensureInitialized(); if (!Platform.isAndroid) { diff --git a/lib/utils/extension.dart b/lib/utils/extension.dart index 6b91b012..e6c48ed7 100644 --- a/lib/utils/extension.dart +++ b/lib/utils/extension.dart @@ -19,8 +19,8 @@ import 'package:miru_app/views/widgets/messenger.dart'; import 'package:path/path.dart' as path; class ExtensionUtils { - static late Map runtimes; - static late Map extensionErrorMap; + static Map runtimes = {}; + static Map extensionErrorMap = {}; static Timer? _timer; static Future get getExtensionsDir async => @@ -69,11 +69,11 @@ class ExtensionUtils { extensionErrorMap = extErrorMap; // 重载扩展页面 if (Get.isRegistered()) { - Get.find().onRefresh(); + Get.find().callRefresh(); } // 重载搜索页面 if (Get.isRegistered()) { - Get.find().needRefresh = true; + Get.find().callRefresh(); } } diff --git a/lib/views/pages/extension/extension_page.dart b/lib/views/pages/extension/extension_page.dart index 7c55dbe3..2e9e5461 100644 --- a/lib/views/pages/extension/extension_page.dart +++ b/lib/views/pages/extension/extension_page.dart @@ -29,9 +29,19 @@ class _ExtensionPageState extends State { @override void initState() { c = Get.put(ExtensionPageController()); + c.isPageOpen = true; + if (c.needRefresh) { + c.onRefresh(); + } super.initState(); } + @override + void dispose() { + c.isPageOpen = false; + super.dispose(); + } + // 导入扩展对话框 _importDialog() { String url = ''; diff --git a/lib/views/pages/search/search_page.dart b/lib/views/pages/search/search_page.dart index 871bfb06..611203b4 100644 --- a/lib/views/pages/search/search_page.dart +++ b/lib/views/pages/search/search_page.dart @@ -23,12 +23,19 @@ class _SearchPageState extends State { @override void initState() { c = Get.put(SearchPageController()); + c.isPageOpen = true; if (c.needRefresh) { c.getRuntime(); } super.initState(); } + @override + void dispose() { + c.isPageOpen = false; + super.dispose(); + } + Widget _buildAndroidSearch(BuildContext context) { return DefaultTabController( length: 4,