• Qun Cheng's avatar
    `DropdownMenu` can be expanded to its parent size (#129753) · 12acff81
    Qun Cheng authored
    Fixes #125199
    
    This PR is to add a new property `expandedInsets` so that the `DropdownMenu` can be expandable and has some margins around.
    
    <details><summary>Example: Setting `expandedInsets` to `EdgeInsets.zero`</summary>
    
    ```dart
    import 'package:flutter/material.dart';
    
    void main() => runApp(const DropdownMenuExample());
    
    class DropdownMenuExample extends StatefulWidget {
      const DropdownMenuExample({super.key});
    
      @override
      State<DropdownMenuExample> createState() => _DropdownMenuExampleState();
    }
    
    class _DropdownMenuExampleState extends State<DropdownMenuExample> {
      final TextEditingController colorController = TextEditingController();
      ColorLabel? selectedColor;
    
      @override
      Widget build(BuildContext context) {
        final List<DropdownMenuEntry<ColorLabel>> colorEntries = <DropdownMenuEntry<ColorLabel>>[];
        for (final ColorLabel color in ColorLabel.values) {
          colorEntries.add(
            DropdownMenuEntry<ColorLabel>(value: color, label: color.label, enabled: color.label != 'Grey'),
          );
        }
    
        return MaterialApp(
          theme: ThemeData(
            useMaterial3: true,
            colorSchemeSeed: Colors.green,
          ),
          home: Scaffold(
            body: Center(
              child: Container(
                width: 500,
                height: 500,
                color: Colors.orange,
                child: DropdownMenu<ColorLabel>(
                  expandedInsets: EdgeInsets.zero,
                  inputDecorationTheme: const InputDecorationTheme(
                    filled: true,
                    fillColor: Colors.white,
                    border: OutlineInputBorder(),
                  ),
                  controller: colorController,
                  dropdownMenuEntries: colorEntries,
                  onSelected: (ColorLabel? color) {
                    setState(() {
                      selectedColor = color;
                    });
                  },
                  // expandedInsets: EdgeInsets.only(left: 35.0, right: 20.0, top: 80),
                ),
              ),
            ),
          ),
        );
      }
    }
    
    enum ColorLabel {
      blue('Blue', Colors.blue),
      pink('Pink', Colors.pink),
      green('Green', Colors.green),
      yellow('Yellow', Colors.yellow),
      grey('Grey', Colors.grey);
    
      const ColorLabel(this.label, this.color);
      final String label;
      final Color color;
    }
    ```
    
    <img width="500" alt="Screenshot 2023-06-28 at 11 33 20 PM" src="https://github.com/flutter/flutter/assets/36861262/e703f8a2-6e7c-45a0-86cf-d96da6dc157a">
    
    </details>
    12acff81
dropdown_menu.dart 32.3 KB