TF-359 Open a web address and mailto link from EmailView
This commit is contained in:
@@ -41,7 +41,6 @@ export 'presentation/views/context_menu/context_menu_action_builder.dart';
|
||||
export 'presentation/views/context_menu/context_menu_builder.dart';
|
||||
export 'presentation/views/context_menu/context_menu_header_builder.dart';
|
||||
export 'presentation/views/context_menu/simple_context_menu_action_builder.dart';
|
||||
export 'presentation/views/dialog/loading_dialog_builder.dart';
|
||||
export 'presentation/views/dialog/downloading_file_dialog_builder.dart';
|
||||
export 'presentation/views/dialog/confirmation_dialog_builder.dart';
|
||||
export 'presentation/views/dialog/edit_text_dialog_builder.dart';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
|
||||
class CupertinoActionSheetBuilder {
|
||||
|
||||
@@ -33,12 +34,12 @@ class CupertinoActionSheetBuilder {
|
||||
showCupertinoModalPopup(
|
||||
context: _context,
|
||||
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||
builder: (context) => CupertinoActionSheet(
|
||||
builder: (context) => PointerInterceptor(child: CupertinoActionSheet(
|
||||
title: _titleWidget,
|
||||
message: _messageWidget,
|
||||
actions: _actionTiles,
|
||||
cancelButton: _cancelWidget,
|
||||
)
|
||||
))
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
|
||||
typedef OnCloseContextMenuAction = void Function();
|
||||
|
||||
@@ -54,7 +55,7 @@ class ContextMenuBuilder {
|
||||
|
||||
void build() {
|
||||
Get.bottomSheet(
|
||||
GestureDetector(
|
||||
PointerInterceptor(child: GestureDetector(
|
||||
onTap: () {
|
||||
if (_onCloseContextMenuAction != null) {
|
||||
_onCloseContextMenuAction!();
|
||||
@@ -88,7 +89,7 @@ class ContextMenuBuilder {
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)),
|
||||
useRootNavigator: true,
|
||||
shape: _shape(),
|
||||
isScrollControlled: true,
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class LoadingDialogBuilder {
|
||||
final Key _key;
|
||||
final String _title;
|
||||
|
||||
LoadingDialogBuilder(this._key, this._title);
|
||||
|
||||
Widget build() {
|
||||
return CupertinoAlertDialog(
|
||||
key: _key,
|
||||
title: Text(_title, style: TextStyle(fontSize: 17.0, color: AppColor.appColor)),
|
||||
content: Padding(
|
||||
padding: EdgeInsets.only(top: 16.0, left: 16.0, right: 16.0),
|
||||
child: Center(
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 20.0,
|
||||
height: 20.0,
|
||||
child: CupertinoActivityIndicator()),
|
||||
SizedBox(height: 16),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -16,12 +16,16 @@ class HtmlContentViewerOnWeb extends StatefulWidget {
|
||||
final double heightContent;
|
||||
final HtmlViewerControllerForWeb controller;
|
||||
|
||||
/// Handler for mailto: links
|
||||
final Function(Uri?)? mailtoDelegate;
|
||||
|
||||
const HtmlContentViewerOnWeb({
|
||||
Key? key,
|
||||
required this.contentHtml,
|
||||
required this.widthContent,
|
||||
required this.heightContent,
|
||||
required this.controller,
|
||||
this.mailtoDelegate,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
@@ -106,7 +110,7 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
|
||||
return false;
|
||||
}
|
||||
|
||||
return url.protocol === "http:" || url.protocol === "https:";
|
||||
return url.protocol === "http:" || url.protocol === "https:" || url.protocol === "mailto:";
|
||||
}
|
||||
</script>
|
||||
''';
|
||||
@@ -217,7 +221,12 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
|
||||
final link = data['url'];
|
||||
if (link != null && mounted) {
|
||||
log('_HtmlContentViewerOnWebState::_setUpWeb(): OpenLink: $link');
|
||||
html.window.open('$link', '_blank');
|
||||
final urlString = link as String;
|
||||
if (urlString.startsWith('mailto:')) {
|
||||
widget.mailtoDelegate?.call(Uri.parse(urlString));
|
||||
} else {
|
||||
html.window.open('$urlString', '_blank');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -23,7 +23,7 @@ class HtmlContentViewer extends StatefulWidget {
|
||||
/// Handler for any non-media URLs that the user taps on the website.
|
||||
///
|
||||
/// Returns `true` when the given `url` was handled.
|
||||
final Future<bool> Function(String url)? urlLauncherDelegate;
|
||||
final Future<bool> Function(Uri url)? urlLauncherDelegate;
|
||||
|
||||
const HtmlContentViewer({
|
||||
Key? key,
|
||||
@@ -180,12 +180,12 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
|
||||
final url = navigation.url;
|
||||
final urlDelegate = widget.urlLauncherDelegate;
|
||||
if (urlDelegate != null) {
|
||||
final handled = await urlDelegate(url);
|
||||
if (handled) {
|
||||
return NavigationDecision.prevent;
|
||||
}
|
||||
await urlDelegate(Uri.parse(url));
|
||||
return NavigationDecision.prevent;
|
||||
}
|
||||
if (await launcher.canLaunch(url)) {
|
||||
await launcher.launch(url);
|
||||
}
|
||||
await launcher.launch(url);
|
||||
return NavigationDecision.prevent;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user