feat: add button to copy url in open dialog

Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
This commit is contained in:
TheOneWithTheBraid 2023-06-27 14:09:00 +02:00
parent 3820d4264a
commit d381705cdd
No known key found for this signature in database
GPG Key ID: 324563E1FC8D6183
1 changed files with 32 additions and 4 deletions

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart' show IterableExtension;
@ -37,14 +38,36 @@ class UrlLauncher {
);
return;
}
final consent = await showOkCancelAlertDialog(
final consent = await showConfirmationDialog(
context: context,
title: L10n.of(context)!.openLinkInBrowser,
message: url,
okLabel: L10n.of(context)!.ok,
cancelLabel: L10n.of(context)!.cancel,
actions: [
AlertDialogAction(
key: null,
label: L10n.of(context)!.cancel,
),
AlertDialogAction(
key: _LaunchUrlResponse.copy,
label: L10n.of(context)!.copy,
),
AlertDialogAction(
key: _LaunchUrlResponse.launch,
label: L10n.of(context)!.ok,
),
],
);
if (consent != OkCancelResult.ok) return;
if (consent == _LaunchUrlResponse.copy) {
await Clipboard.setData(ClipboardData(text: uri.toString()));
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(L10n.of(context)!.copiedToClipboard),
),
);
return;
}
if (consent != _LaunchUrlResponse.launch) return;
if (!{'https', 'http'}.contains(uri.scheme)) {
// just launch non-https / non-http uris directly
@ -215,3 +238,8 @@ class UrlLauncher {
}
}
}
enum _LaunchUrlResponse {
launch,
copy,
}