addDropDownButton<T> method

void addDropDownButton<T>({
  1. String? key,
  2. List<T>? values,
  3. T? defaultValue,
  4. DropMenuItemWidgetBuilder? builder,
  5. String? labelText,
})

参数

  • key 返回值DialogResult.data的自定义键值,默认返回的是FormField所在列表中的下标(如:'field1')。
  • values DropList的值,即被选择的值。String和int较为适用。
  • builder 自定义构建,如MenuItem不满足需求时。

Implementation

void addDropDownButton<T>(
    {String? key,
    List<T>? values,
    T? defaultValue,
    DropMenuItemWidgetBuilder? builder,
    String? labelText}) {
  if (values == null || values.isEmpty) return;
  T? _currentValue = defaultValue;
  _children.add(
    StatefulBuilder(builder: (context, StateSetter setState) {
      return Padding(
        padding: kVerticalPaddingTen,
        child: DropdownButtonFormField<T>(
          value: _currentValue,
          decoration: InputDecoration(
            labelText: labelText,
            border: _outlineInputBorder,
          ),
          hint: Padding(
            padding: kHorizontalPaddingTen,
            child: const Text("请选择"),
          ),
          items: values
              .map(
                (e) => DropdownMenuItem<T>(
                  value: e,
                  child: builder == null
                      ? Padding(
                          padding: kHorizontalPaddingTen,
                          child: Text(
                            "$e",
                            style: TextStyle(color: _textColor),
                          ))
                      : builder.call(context, e),
                  onTap: () {},
                ),
              )
              .toList(),
          borderRadius: BorderRadius.circular(10.0),
          dropdownColor: _backgroundColor,
          onChanged: (value) {
            setState(() {
              _currentValue = value!;
            });
          },
          onSaved: (value) {
            maps[key ?? "field${maps.length}"] = value;
          },
          validator: (value) {
            if (value == null) {
              return "Select it value.";
            }
            return null;
          },
        ),
      );
    }),
  );
}