如何在flutter中分享选定的文本

问题描述 投票:0回答:1

我在 flutter 中开发阅读书籍应用程序,我将文本设置为可选文本,但是当我想共享所选文本时出现问题,有什么方法可以做到这一点吗?

我尝试在 selectable 中使用 onselectionchanged 来捕获所选文本,但这不起作用

flutter dart select text share
1个回答
0
投票

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',
          ),
        ),
      ),
    );
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.