• Ian Hickson's avatar
    Add `DropdownMenu.focusNode` (#142516) · 16e014e8
    Ian Hickson authored
    fixes [`DropdownMenu` doesn't have a focusNode](https://github.com/flutter/flutter/issues/142384)
    
    ### Code sample
    
    <details>
    <summary>expand to view the code sample</summary> 
    
    ```dart
    import 'package:flutter/material.dart';
    
    enum TShirtSize {
      s('S'),
      m('M'),
      l('L'),
      xl('XL'),
      xxl('XXL'),
      ;
    
      const TShirtSize(this.label);
      final String label;
    }
    
    void main() => runApp(const MyApp());
    
    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      @override
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      final FocusNode _focusNode = FocusNode();
    
      @override
      void dispose() {
        _focusNode.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          home: Scaffold(
            appBar: AppBar(
              title: const Text('DropdownMenu Sample'),
            ),
            body: Center(
              child: DropdownMenu<TShirtSize>(
                focusNode: _focusNode,
                initialSelection: TShirtSize.m,
                label: const Text('T-Shirt Size'),
                dropdownMenuEntries: TShirtSize.values.map((e) {
                  return DropdownMenuEntry<TShirtSize>(
                    value: e,
                    label: e.label,
                  );
                }).toList(),
              ),
            ),
            floatingActionButton: FloatingActionButton.extended(
              onPressed: () {
                _focusNode.requestFocus();
              },
              label: const Text('Request Focus on DropdownMenu'),
            ),
          ),
        );
      }
    }
    ```
    
    </details>
    16e014e8
dropdown_menu.dart 37.2 KB