簡體   English   中英

如何通過單擊按鈕獲取 DropdownButtonFormField 值 - Flutter

[英]How to get DropdownButtonFormField value with a button click - Flutter

我正在嘗試使用 Flutter 開發調查表格,並且表格中有多個下拉字段。 當我單擊保存按鈕時,我想從這些下拉列表中獲取選定的值。 但我得到的只是我最初在 initState() 中設置的值。 我正在使用的代碼如下。 非常感謝任何幫助解決這個問題。

class _EditSurveyState extends State<EditSurvey> {
  String contactMethod;
  String country;

  List contactMethodList = ['phone', 'email', 'mail'];
  List countryList = ['us', 'uk', 'germany'];

  @override
  void initState() { 
    super.initState();
    contactMethod = surveryData['contact'];
    country = surveryData['country'];
  }
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      return Scaffold(
        children: [
          Expanded(
            flex: screenWidth(context) < 1300 ? 10 : 8,
            child: SafeArea(
              child: Column(
                children: [
                  createDropdownField("Contact", contactMethod, contactMethodList),
                  createDropdownField("Country", country, countryList),
                  Row(mainAxisAlignment: MainAxisAlignment.end,
                      children: [
                         ElevatedButton(
                            onPressed: () async {
                               print(contactMethod + country);
                            },
                            style: ElevatedButton.styleFrom(
                              padding: EdgeInsets.symmetric(horizontal: 50),
                              shape: RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(10)
                            )
                          ),
                          child: Text(
                            "UPDATE",
                            style: TextStyle(
                              color: Colors.white,
                              fontSize: 15.0,
                              fontWeight: FontWeight.bold,
                         ),
                       )
                     ),
                   ],
                 ),
                ]
              )
            )
          ) 
        ]  
      )
    );
  }
  
  Row createDropdownField(String labelText, String _valueChoose, List valueList) {
    return Row (
      children: [
        SizedBox(height: 25,),
        Align(
          alignment: Alignment.centerLeft,
          child: Text(
            '$labelText',
          ),
        ),
        DropdownButtonFormField(
          value: _valueChoose,
          hint: Text("$labelText"),
          icon: Icon(Icons.arrow_drop_down),
          isExpanded: true,
          onChanged: (newValue){
            setState(() {
              _valueChoose = newValue;
            });
          },
          items: valueList.map((valueItem){
            return DropdownMenuItem(
              value: valueItem,
              child: Text(valueItem),
            );
          }).toList(),
        ),
      ],
    );
  }
} 

我不明白你為什么要使用 intitstate 如果你想將值初始化為 String 你可以在聲明時這樣做,嘗試刪除 initstate 和

首先聲明一個變量,您將從 onchange 下拉列表中存儲新值

IE

class _EditSurveyState extends State<EditSurvey> {
String _currentValue;
DropdownButtonFormField(
              
              onChanged: (val) =>
                  setState(() => _currentValue = val as String),
              value: _currentValue ,
              items: YourList.map((item) {
                return DropdownMenuItem(
                  value: item,
                  child: Text('$item Items'),
                );
              }).toList(),
            ),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM