mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-15 21:03:41 +00:00
feat: enhance deep link handling for install extensions (#1249)
This commit is contained in:
7 files changed
+77
-51
No files matched your search
@@ -9,6 +9,9 @@ class ExtensionController extends GetxController {
|
||||
final devMode = false.obs;
|
||||
var _devModeCount = 0;
|
||||
|
||||
/// Flag to prevent handling pending install multiple times
|
||||
bool pendingInstallHandled = false;
|
||||
|
||||
@override
|
||||
void onInit() async {
|
||||
super.onInit();
|
||||
|
||||
@@ -30,8 +30,34 @@ class ExtensionView extends GetView<ExtensionController> {
|
||||
final _installUrlController = TextEditingController();
|
||||
final _installBtnController = IconButtonLoadingController();
|
||||
|
||||
Future<void> _doInstall() async {
|
||||
if (_installUrlController.text.isEmpty) {
|
||||
controller.tryOpenDevMode();
|
||||
return;
|
||||
}
|
||||
_installBtnController.start();
|
||||
try {
|
||||
await installExtension(InstallExtension(url: _installUrlController.text));
|
||||
Get.snackbar('tip'.tr, 'extensionInstallSuccess'.tr);
|
||||
await controller.load();
|
||||
} catch (e) {
|
||||
showErrorMessage(e);
|
||||
} finally {
|
||||
_installBtnController.stop();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// Handle pending install extension from deep link
|
||||
final args = Get.rootDelegate.arguments();
|
||||
if (args is InstallExtension && !controller.pendingInstallHandled) {
|
||||
controller.pendingInstallHandled = true;
|
||||
_installUrlController.text = args.url;
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_doInstall();
|
||||
});
|
||||
}
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -71,23 +97,7 @@ class ExtensionView extends GetView<ExtensionController> {
|
||||
const SizedBox(width: 10),
|
||||
IconButtonLoading(
|
||||
controller: _installBtnController,
|
||||
onPressed: () async {
|
||||
if (_installUrlController.text.isEmpty) {
|
||||
controller.tryOpenDevMode();
|
||||
return;
|
||||
}
|
||||
_installBtnController.start();
|
||||
try {
|
||||
await installExtension(InstallExtension(
|
||||
url: _installUrlController.text));
|
||||
Get.snackbar('tip'.tr, 'extensionInstallSuccess'.tr);
|
||||
await controller.load();
|
||||
} catch (e) {
|
||||
showErrorMessage(e);
|
||||
} finally {
|
||||
_installBtnController.stop();
|
||||
}
|
||||
},
|
||||
onPressed: _doInstall,
|
||||
icon: const Icon(Icons.download)),
|
||||
controller.devMode.value && Util.isDesktop()
|
||||
? IconButton(
|
||||
|
||||
Reference in new issue
Block a user