blob: 48388efd1d0eec117d85f90d9ffdb91bfe103ade [file] [log] [blame]
// Copyright 2013 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.
import 'package:flutter/material.dart';
// ignore_for_file: public_member_api_docs
class DropdownMenu<T> extends StatelessWidget {
DropdownMenu({
Key? key,
required this.items,
required this.initialValue,
required this.label,
this.labelStyle,
Color? background,
EdgeInsetsGeometry? padding,
Color? menuItemBackground,
EdgeInsetsGeometry? menuItemMargin,
this.onChanged,
}) : assert(
items.isNotEmpty, 'The items map must contain at least one entry'),
background = background ?? Colors.black12,
padding =
padding ?? const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
menuItemBackground = menuItemBackground ?? Colors.white,
menuItemMargin = menuItemMargin ?? const EdgeInsets.only(left: 4),
super(key: key);
final Map<String, T> items;
final T initialValue;
final String label;
final TextStyle? labelStyle;
final ValueChanged<T?>? onChanged;
final Color background;
final EdgeInsetsGeometry padding;
final Color menuItemBackground;
final EdgeInsetsGeometry menuItemMargin;
@override
Widget build(BuildContext context) {
return Container(
color: background,
padding: padding,
child: Row(
children: <Widget>[
Text(
label,
style: labelStyle ?? Theme.of(context).textTheme.titleMedium,
),
Container(
color: menuItemBackground,
margin: menuItemMargin,
child: DropdownButton<T>(
isDense: true,
value: initialValue,
items: <DropdownMenuItem<T>>[
for (String item in items.keys)
DropdownMenuItem<T>(
value: items[item],
child: Container(
padding: const EdgeInsets.only(left: 4),
child: Text(item),
),
),
],
onChanged: (T? value) => onChanged!(value),
),
),
],
),
);
}
}