• 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
Name
Last commit
Last update
..
fix_data Loading commit data...
src Loading commit data...
analysis_options.yaml Loading commit data...
analysis_options_user.yaml Loading commit data...
animation.dart Loading commit data...
cupertino.dart Loading commit data...
foundation.dart Loading commit data...
gestures.dart Loading commit data...
material.dart Loading commit data...
painting.dart Loading commit data...
physics.dart Loading commit data...
rendering.dart Loading commit data...
scheduler.dart Loading commit data...
semantics.dart Loading commit data...
services.dart Loading commit data...
widgets.dart Loading commit data...