mirror of
https://github.com/flutter/samples.git
synced 2025-11-08 13:58:47 +00:00
Add implementations for onShare and onSearchWeb (#2143)
Fixes #2088 ## Pre-launch Checklist - [x] I read the [Flutter Style Guide] _recently_, and have followed its advice. - [x] I signed the [CLA]. - [x] I read the [Contributors Guide]. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] All existing and new tests are passing. --------- Co-authored-by: Brett Morgan <brett.morgan@gmail.com>
This commit is contained in:
@@ -28,6 +28,8 @@ class BasicTextField extends StatefulWidget {
|
||||
VoidCallback? onSelectAll,
|
||||
VoidCallback? onLookUp,
|
||||
VoidCallback? onLiveTextInput,
|
||||
VoidCallback? onSearchWeb,
|
||||
VoidCallback? onShare,
|
||||
TextSelectionToolbarAnchors anchors,
|
||||
) {
|
||||
return AdaptiveTextSelectionToolbar.editable(
|
||||
@@ -38,10 +40,9 @@ class BasicTextField extends StatefulWidget {
|
||||
onSelectAll: onSelectAll,
|
||||
onLookUp: onLookUp,
|
||||
onLiveTextInput: onLiveTextInput,
|
||||
onSearchWeb: onSearchWeb,
|
||||
onShare: onShare,
|
||||
anchors: anchors,
|
||||
// TODO(Renzo-Olivares): https://github.com/flutter/samples/issues/2088
|
||||
onSearchWeb: null,
|
||||
onShare: null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@ typedef BasicTextFieldContextMenuBuilder = Widget Function(
|
||||
VoidCallback? onSelectAll,
|
||||
VoidCallback? onLookUp,
|
||||
VoidCallback? onLiveTextInput,
|
||||
VoidCallback? onSearchWeb,
|
||||
VoidCallback? onShare,
|
||||
TextSelectionToolbarAnchors anchors,
|
||||
);
|
||||
|
||||
@@ -867,6 +869,13 @@ class BasicTextInputClientState extends State<BasicTextInputClient>
|
||||
liveTextInputEnabled
|
||||
? () => _startLiveTextInput(SelectionChangedCause.toolbar)
|
||||
: null,
|
||||
searchWebEnabled
|
||||
? () =>
|
||||
_searchWebForSelection(SelectionChangedCause.toolbar)
|
||||
: null,
|
||||
shareEnabled
|
||||
? () => _shareSelection(SelectionChangedCause.toolbar)
|
||||
: null,
|
||||
_contextMenuAnchors,
|
||||
);
|
||||
},
|
||||
@@ -1016,6 +1025,65 @@ class BasicTextInputClientState extends State<BasicTextInputClient>
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool get searchWebEnabled {
|
||||
if (defaultTargetPlatform != TargetPlatform.iOS) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !textEditingValue.selection.isCollapsed &&
|
||||
textEditingValue.selection.textInside(textEditingValue.text).trim() !=
|
||||
'';
|
||||
}
|
||||
|
||||
/// Launch a web search on the current selection,
|
||||
/// as in the "Search Web" edit menu button on iOS.
|
||||
///
|
||||
/// Currently this is only implemented for iOS.
|
||||
Future<void> _searchWebForSelection(SelectionChangedCause cause) async {
|
||||
final String text =
|
||||
textEditingValue.selection.textInside(textEditingValue.text);
|
||||
if (text.isNotEmpty) {
|
||||
await SystemChannels.platform.invokeMethod(
|
||||
'SearchWeb.invoke',
|
||||
text,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool get shareEnabled {
|
||||
switch (defaultTargetPlatform) {
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.iOS:
|
||||
return !textEditingValue.selection.isCollapsed &&
|
||||
textEditingValue.selection
|
||||
.textInside(textEditingValue.text)
|
||||
.trim() !=
|
||||
'';
|
||||
case TargetPlatform.macOS:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// Launch the share interface for the current selection,
|
||||
/// as in the "Share..." edit menu button on iOS.
|
||||
///
|
||||
/// Currently this is only implemented for iOS and Android.
|
||||
Future<void> _shareSelection(SelectionChangedCause cause) async {
|
||||
final String text =
|
||||
textEditingValue.selection.textInside(textEditingValue.text);
|
||||
if (text.isNotEmpty) {
|
||||
await SystemChannels.platform.invokeMethod(
|
||||
'Share.invoke',
|
||||
text,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Actions(
|
||||
|
||||
Reference in New Issue
Block a user