You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter阅读App中如何实现选中文本的分享功能?

解决Flutter选中文本无法分享的问题

1. 排查onSelectionChanged不生效的原因

先确认你的SelectableText是否正确绑定回调,且处理了非空选中状态:

  • 若selection是TextSelection.collapsed(光标未选中内容),需跳过处理
  • 确保使用StatefulWidget,因为需要保存选中的文本状态

2. 实现选中文本捕获与分享功能

以下是完整的可运行示例,包含文本选中捕获和分享逻辑:

import 'package:flutter/material.dart';
import 'package:share_plus/share_plus.dart';

class ReaderPage extends StatefulWidget {
  const ReaderPage({super.key});

  @override
  State<ReaderPage> createState() => _ReaderPageState();
}

class _ReaderPageState extends State<ReaderPage> {
  String? _selectedText;
  final String _content = "这里是你的阅读文本内容,测试选中文本分享功能,选中这段文字试试...";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("阅读页面"),
        // 选中内容后显示分享按钮
        actions: _selectedText != null
            ? [
                IconButton(
                  icon: const Icon(Icons.share),
                  onPressed: () => Share.share(_selectedText!),
                )
              ]
            : null,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: SelectableText(
          _content,
          onSelectionChanged: (selection, cause) {
            // 仅当选中有效内容时更新状态
            if (!selection.isCollapsed) {
              setState(() {
                _selectedText = _content.substring(
                  selection.start,
                  selection.end,
                );
              });
            } else {
              setState(() {
                _selectedText = null;
              });
            }
          },
          // 自定义原生选择工具栏,添加分享选项
          toolbarItems: [
            ToolbarItem(
              label: "分享",
              icon: Icons.share,
              onPressed: () {
                if (_selectedText != null) {
                  Share.share(_selectedText!);
                }
              },
            )
          ],
          // 保留默认工具栏功能
          toolbarOptions: const ToolbarOptions(
            copy: true,
            selectAll: true,
          ),
        ),
      ),
    );
  }
}

3. 关键注意事项

  • 分享功能依赖share_plus包,需先在pubspec.yaml中添加依赖:share_plus: ^最新版本号
  • onSelectionChanged的cause参数可区分选中操作是用户手动触发还是代码触发,按需处理
  • 优先使用SelectableText原生工具栏扩展,更贴合系统交互体验

内容的提问来源于stack exchange,提问作者mahmood alsafar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:18:14