// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This example demonstrates a custom context menu in non-editable text using // SelectionArea. import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() => runApp(const MyApp()); const String text = 'I am some text inside of SelectionArea. Right click (desktop) or long press (mobile) me to show the customized context menu.'; class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { void _showDialog (BuildContext context) { Navigator.of(context).push( DialogRoute<void>( context: context, builder: (BuildContext context) => const AlertDialog(title: Text('You clicked print!')), ), ); } @override void initState() { super.initState(); // On web, disable the browser's context menu since this example uses a custom // Flutter-rendered context menu. if (kIsWeb) { BrowserContextMenu.disableContextMenu(); } } @override void dispose() { if (kIsWeb) { BrowserContextMenu.enableContextMenu(); } super.dispose(); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('Context menu anywhere'), ), body: Center( child: SizedBox( width: 200.0, child: SelectionArea( contextMenuBuilder: ( BuildContext context, SelectableRegionState selectableRegionState, ) { return AdaptiveTextSelectionToolbar.buttonItems( anchors: selectableRegionState.contextMenuAnchors, buttonItems: <ContextMenuButtonItem>[ ...selectableRegionState.contextMenuButtonItems, ContextMenuButtonItem( onPressed: () { ContextMenuController.removeAny(); _showDialog(context); }, label: 'Print', ), ], ); }, child: ListView( children: const <Widget>[ SizedBox(height: 20.0), Text(text), ], ), ), ), ), ), ); } }