我在 flutter 中开发阅读书籍应用程序,我将文本设置为可选文本,但是当我想共享所选文本时出现问题,有什么方法可以做到这一点吗?
我尝试在 selectable 中使用 onselectionchanged 来捕获所选文本,但这不起作用
onselectionchanged 应该适合你,尽管每次用户更改选择时都会执行它,我认为这不是你想要的,正常的做法是在上下文菜单中添加一个按钮,其中包含你想要共享的按钮你的情况。
使用 contextMenuBuilder, 注意:此示例使用 url_launcher 发送带有文本的短信,您需要运行
flutter pub 添加 url_launcher
示例:
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
title: const Text('Material App Bar'),
),
body: Center(
child: SelectableText(
contextMenuBuilder: (context, editableTextState) {
final TextEditingValue value = editableTextState.textEditingValue;
// Get text selected
final textSeleted = value.selection.textInside(value.text);
// Get button default of text selection
final List<ContextMenuButtonItem> buttonItems =
editableTextState.contextMenuButtonItems;
// Add new button share
buttonItems.insert(
0,
ContextMenuButtonItem(
label: 'share',
onPressed: () {
final Uri smsLaunchUri = Uri(
scheme: 'sms',
path: '011122355',
queryParameters: <String, String>{
'body': textSeleted,
},
);
// Launch sms with text selected
launchUrl(smsLaunchUri);
// Close context menu
ContextMenuController.removeAny();
},
));
return AdaptiveTextSelectionToolbar.buttonItems(
anchors: editableTextState.contextMenuAnchors,
buttonItems: buttonItems,
);
},
'Hello World text bla bla 123',
),
),
),
);
}
}