// 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.

/// Flutter code sample for [DropdownMenu]s. The first dropdown menu has an outlined border
/// which is the default configuration, and the second one has a filled input decoration.

import 'package:flutter/material.dart';

void main() => runApp(const DropdownMenuExample());

class DropdownMenuExample extends StatelessWidget {
  const DropdownMenuExample({super.key});

  List<DropdownMenuEntry> getEntryList() {
    final List<DropdownMenuEntry> entries = <DropdownMenuEntry>[];

    for (int index = 0; index < EntryLabel.values.length; index++) {
      // Disabled item 1, 2 and 6.
      final bool enabled = index != 1 && index != 2 && index != 6;
      entries.add(DropdownMenuEntry(label: EntryLabel.values[index].label, enabled: enabled));
    }
    return entries;
  }

  @override
  Widget build(BuildContext context) {
    final List<DropdownMenuEntry> dropdownMenuEntries = getEntryList();

    return MaterialApp(
      theme: ThemeData(
        useMaterial3: true,
        colorSchemeSeed: Colors.green
      ),
      home: Scaffold(
        body: SafeArea(
          child: Padding(
            padding: const EdgeInsets.only(top: 20),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                DropdownMenu(
                  label: const Text('Label'),
                  dropdownMenuEntries: dropdownMenuEntries,
                ),
                const SizedBox(width: 20),
                DropdownMenu(
                  enableFilter: true,
                  leadingIcon: const Icon(Icons.search),
                  label: const Text('Label'),
                  dropdownMenuEntries: dropdownMenuEntries,
                  inputDecorationTheme: const InputDecorationTheme(filled: true),
                )
              ],
            ),
          )
        ),
      ),
    );
  }
}

enum EntryLabel {
  item0('Item 0'),
  item1('Item 1'),
  item2('Item 2'),
  item3('Item 3'),
  item4('Item 4'),
  item5('Item 5'),
  item6('Item 6');

  const EntryLabel(this.label);
  final String label;
}