颤动中的下拉按钮值在onchange事件期间不发生变化

时间:2019-10-07 19:51:09

标签: flutter dart

我不熟悉使用Dropdownbutton,但是我从示例中复制了此代码,并且在选择其他类别时该值未更改。我不确定发生了什么,但是在调试时该值在内部发生了变化,但是显示的文本仍保持默认设置,即“选择目标类别”。

DropdownButton<String>(
                   value: dropdownValue,
                   icon: Icon(Icons.check_circle_outline),
                   iconSize: 24,
                   elevation: 16,
                   style: TextStyle(
                  color: Colors.blue[300]
                  ),
                    underline: Container(
                    height: 2,
                    color: Colors.blue[300],
                 ),
                      onChanged: (String newValue) {
                       setState(() {
                      dropdownValue = newValue;
                       updateCategory(newValue);
             });
         },
                    items: <String>['Choose a goal category', 'Financial', 'Physical', 'Family', 'Mental', 'Social', 'Spiritual', 'Personal']

                    .map<DropdownMenuItem<String>>((String value) {
                     return DropdownMenuItem<String>(
                     value: value,
                     child: Text(value),
                  );
                 })
            .toList(),
      ),

2 个答案:

答案 0 :(得分:0)

替换它。

items : <String>['Choose a goal category', 'Financial', 'Physical', 'Family', 'Mental', 'Social', 'Spiritual', 'Personal']
.map((String dropDownStringItem){
   return DropdownMenuItem<String>{
      value : dropDownStringItem,
      ...
   }
}).toList(),

希望对您有帮助

答案 1 :(得分:0)

步骤1:声明String dropdownValue;不要设置值
步骤2:使用提示并设置为Text(“选择目标类别”)
步骤3:项目删除字符串“选择目标类别”

代码段

String dropdownValue;
...
DropdownButton<String>(              
              hint: Text('Choose a goal category'),
              value: dropdownValue,
              icon: Icon(Icons.check_circle_outline),
              iconSize: 24,
              elevation: 16,
              style: TextStyle(color: Colors.deepPurple),
              underline: Container(
                height: 2,
                color: Colors.blue[300],
              ),
              onChanged: (String newValue) {
                setState(() {
                  dropdownValue = newValue;
                });
              },
              items: <String>[
                'Financial', 'Physical', 'Family', 'Mental', 'Social', 'Spiritual', 'Personal'
              ].map<DropdownMenuItem<String>>((String value) {
                return DropdownMenuItem<String>(
                  value: value,
                  child: Text(value),
                );
              }).toList(),
            ),

完整代码

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: MyStatefulWidget(),
      ),
    );
  }
}

class MyStatefulWidget extends StatefulWidget {
  MyStatefulWidget({Key key}) : super(key: key);

  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  String dropdownValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Center(
            child: DropdownButton<String>(
              //isDense: true,
              hint: Text('Choose a goal category'),
              value: dropdownValue,
              icon: Icon(Icons.check_circle_outline),
              iconSize: 24,
              elevation: 16,
              style: TextStyle(color: Colors.deepPurple),
              underline: Container(
                height: 2,
                color: Colors.blue[300],
              ),
              onChanged: (String newValue) {
                setState(() {
                  dropdownValue = newValue;
                });
              },
              items: <String>[
                'Financial', 'Physical', 'Family', 'Mental', 'Social', 'Spiritual', 'Personal'
              ].map<DropdownMenuItem<String>>((String value) {
                return DropdownMenuItem<String>(
                  value: value,
                  child: Text(value),
                );
              }).toList(),
            ),
          ),
        ],
      ),
    );
  }
}

enter image description here