Flutter Modal 中的下拉值未更改

问题描述 投票:0回答:1

我在

Dropdown
中有这个
Modal
小部件,并且在使用
setState
时无法更改小部件中的值,并且每次更改值时,我都应该关闭模态,然后更改值。

这是我的代码:

var chosenRecentDay = 1;
List<int> daysList = [for (var i = 1; i < 31; i++) i];
int defaultDropDownValue = 1;



showModalBottomSheet(
                            context: context,
                            builder: (BuildContext context) {
                              return SizedBox(
                                height: 500.0,
                                child: Center(
                                  child: Padding(
                                    padding: const EdgeInsets.symmetric(
                                        vertical: 20.0),
                                    child: Column(
                                      mainAxisAlignment:
                                          MainAxisAlignment.start,
                                      children: <Widget>[
                                        SizedBox(
                                          width: 150.0,
                                          height: 45.0,
                                          child: Center(
                                            child: DropdownButton(
                                              value: defaultDropDownValue,
                                              menuMaxHeight: 250.0,
                                              icon: const Icon(
                                                Icons
                                                    .arrow_drop_down_circle_rounded,
                                                color: Color(0xffF85E63),
                                              ),
                                              borderRadius:
                                                  BorderRadius.circular(
                                                      30.0),
                                              alignment: Alignment.center,
                                              underline: Container(
                                                  color:
                                                      Colors.transparent),
                                              items: daysList.map<
                                                      DropdownMenuItem<
                                                          dynamic>>(
                                                  (dynamic value) {
                                                var convertedList =
                                                    value.toString();
                                                return DropdownMenuItem<
                                                    dynamic>(
                                                  value: value,
                                                  child: Row(
                                                    mainAxisAlignment:
                                                        MainAxisAlignment
                                                            .start,
                                                    children: <Widget>[
                                                      Padding(
                                                        padding:
                                                            const EdgeInsets
                                                                .symmetric(
                                                                horizontal:
                                                                    5.0),
                                                        child: Text(
                                                          convertedList,
                                                          style:
                                                              const TextStyle(
                                                            color: Color(
                                                                0xffF85E63),
                                                            fontFamily:
                                                                'Lalezar',
                                                            fontSize: 18.0,
                                                          ),
                                                        ),
                                                      ),
                                                    ],
                                                  ),
                                                );
                                              }).toList(),
                                              onChanged: (val) {
                                                setState(() {
                                                  defaultDropDownValue =
                                                      val!;
                                                  chosenRecentDay = val;
                                                });
                                              },
                                            ),
                                          ),
                                        ),
                                      ],
                                    ),
                                  ),
                                ),
                              );
                            },
                          );
android flutter widget dropdown setstate
1个回答
0
投票

您正在使用模态,外部

setState
不会影响模态。

一种解决方案是使模式有状态,您可以用

StatefulBuilder
包装您的小部件,如下所示:

showModalBottomSheet(
  context = context,
  builder = (BuildContext context) {
    return StatefulBuilder(builder: (context, setState) {
      // return your widget here
    });
  },
);
© www.soinside.com 2019 - 2024. All rights reserved.