文本选择弹出菜单

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

如果用户选择文本,应该有快速注释菜单 会弹出,所以当用户在我的 flutter 项目中选择文本时,我需要显示一个弹出菜单。

当用户在我的 flutter 项目中选择文本时,我需要显示一个弹出菜单,任何人都可以给我任何示例吗

android flutter popup popupmenu textselection
1个回答
0
投票
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Text Selection Menu Example'),
        ),
        body: TextSelectionMenuDemo(),
      ),
    );
  }
}

class TextSelectionMenuDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: SelectableText(
        'Select this text to show the popup menu.',
        style: TextStyle(fontSize: 18.0),
        onTap: () {
          // Handle text selection here (if needed).
        },
        onSelectionChanged: (TextSelection selection, SelectionChangedCause cause) {
          if (selection.baseOffset != selection.extentOffset) {
            // Text is selected, show the popup menu.
            showTextPopupMenu(context);
          }
        },
      ),
    );
  }

  void showTextPopupMenu(BuildContext context) {
    final RenderBox overlay = Overlay.of(context).context.findRenderObject() as RenderBox;

    final RenderBox text = context.findRenderObject() as RenderBox;
    final Offset offset = text.localToGlobal(Offset.zero, ancestor: overlay);

    final TextSelection selection = TextSelection(baseOffset: 0, extentOffset: 0);
    final List<PopupMenuEntry<String>> popupItems = [
      PopupMenuItem<String>(
        value: 'Copy',
        child: Text('Copy'),
      ),
      PopupMenuItem<String>(
        value: 'Cut',
        child: Text('Cut'),
      ),
      PopupMenuItem<String>(
        value: 'Paste',
        child: Text('Paste'),
      ),
    ];

    showMenu<String>(
      context: context,
      position: RelativeRect.fromRect(offset & text.size, Offset.zero & overlay.size),
      items: popupItems,
    ).then((String? selectedValue) {
      if (selectedValue != null) {
        // Handle selected menu item here.
        print('Selected: $selectedValue');
      }
    });
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.