import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import 'constants.dart'; import 'platform_selector.dart'; class CustomButtonsPage extends StatelessWidget { CustomButtonsPage({ super.key, required this.onChangedPlatform, }); static const String route = 'custom-buttons'; static const String title = 'Custom Buttons'; static const String subtitle = 'The usual buttons, but with a custom appearance.'; final PlatformCallback onChangedPlatform; final TextEditingController _controller = TextEditingController( text: 'Show the menu to see the usual default buttons, but with a custom appearance.', ); static const String url = '$kCodeUrl/custom_buttons_page.dart'; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text(CustomButtonsPage.title), actions: [ PlatformSelector( onChangedPlatform: onChangedPlatform, ), IconButton( icon: const Icon(Icons.code), onPressed: () async { if (!await launchUrl(Uri.parse(url))) { throw 'Could not launch $url'; } }, ), ], ), body: Center( child: SizedBox( width: 300.0, child: TextField( controller: _controller, maxLines: 4, minLines: 2, contextMenuBuilder: (context, editableTextState) { return AdaptiveTextSelectionToolbar( anchors: editableTextState.contextMenuAnchors, // Build the default buttons, but make them look custom. // Note that in a real project you may want to build // different buttons depending on the platform. children: editableTextState.contextMenuButtonItems.map((buttonItem) { return CupertinoButton( borderRadius: null, color: const Color(0xffaaaa00), disabledColor: const Color(0xffaaaaff), onPressed: buttonItem.onPressed, padding: const EdgeInsets.all(10.0), pressedOpacity: 0.7, child: SizedBox( width: 200.0, child: Text( CupertinoTextSelectionToolbarButton.getButtonLabel( context, buttonItem), ), ), ); }).toList(), ); }, ), ), ), ); } }