在颤动中将图标添加到 DropDownButton(已扩展)的左侧

Muh*_*zan 16 android dart material-design dropdown flutter

我想在左侧添加图标,DropDownButton但找不到方法。我想要实现的是这样的:

在此处输入图片说明

我尝试了以下代码,但它将图标放在我不想要的位置,并且它也覆盖了箭头图标:

 `@override
  Widget build(BuildContext context) {
  return Scaffold(
  body: Container(
    margin: EdgeInsets.only(top: 64.0, left: 16.0, right: 16.0),
    color: Colors.white,
    child: DropdownButton(
      icon: Icon(
        Icons.person,
        color: Colors.redAccent,
        size: 20.09,
      ),
      isExpanded: true,
      items: _studentList.map((val) {
        return DropdownMenuItem(
          value: val,
          child: Text(val),
        );
      }).toList(),
      value: _currentSelectedItem,
      onChanged: (value) {
        setState(() {
          _currentSelectedItem = value;
        });
      },
    ),
  ),
);
  }`
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是这样的:

在此处输入图片说明

我也尝试在小部件内部放置Icon()和放置,但这不允许扩展到全宽。DropDownButton()Row()DropDownButton()

任何帮助,将不胜感激。

谢谢

Zee*_*Ali 28

使用DropdownButtonFormField因为它具有装饰属性。您可以使用prefixIcon属性来设置左侧的图标。

例子:

DropdownButtonFormField<String>(
         decoration: InputDecoration(
         prefixIcon: Icon(Icons.person),
         ),
         hint: Text('Please choose account type'),
         items: <String>['A', 'B', 'C', 'D'].map((String value) {
         return DropdownMenuItem<String>(
         value: value,
         child: new Text(value),
       );
      }).toList(),
     onChanged: (_) {},
),
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


小智 14

没有用于以您想要的方式添加图标的特定属性,但您始终可以解决您的代码并找到一些调整。使用以下代码将您Icon()置于DropDownButton()按钮之上。

@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
  children: <Widget>[
    Container(
      decoration: BoxDecoration(
        color: Colors.white,
        boxShadow: [
          BoxShadow(
            color: Colors.grey,
            blurRadius: 20.0,
            spreadRadius: 0.5,
            offset: Offset(1.0, 1.0),
          ),
        ],
      ),
      padding: EdgeInsets.only(left: 44.0),
      margin: EdgeInsets.only(top: 64.0, left: 16.0, right: 16.0),
      child: DropdownButton(
        isExpanded: true,
        items: your_list.map(
          (val) {
            return DropdownMenuItem(
              value: val,
              child: Text(val),
            );
          },
        ).toList(),
        value: _currentSelectedItem,
        onChanged: (value) {
          setState(() {
            _currentSelectedItem = value;
          });
        },
      ),
    ),
    Container(
      margin: EdgeInsets.only(top: 80.0, left: 28.0),
      child: Icon(
        Icons.person,
        color: Colors.redAccent,
        size: 20.0,
      ),
    ),
  ],
),
  );
}
Run Code Online (Sandbox Code Playgroud)


小智 5

请记住,一切都是小部件,因此:

iconSize: 0,
hint: Row(
         children: [
            Container(
                child: Text('Freguesias'),
            ),
            Container(
                child: Icon(Icons.arrow_drop_down),
            ),
          ],
 ),
Run Code Online (Sandbox Code Playgroud)