微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Flutter中使用setState更新ModalBottomSheet的ParentWidget?

如何解决如何在Flutter中使用setState更新ModalBottomSheet的ParentWidget?

在我的SingleDayCalendarView()中,我有一个按钮,它调用以addShiftBottomSheet作为其子元素的showModalBottomSheet():

class SingleDayCalendarView extends StatelessWidget {
...
    onpressed: () {
                  showModalBottomSheet(
                      context: context,isScrollControlled: true,enableDrag: true,shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.only(
                          topLeft: Radius.circular(25),topRight: Radius.circular(25),),builder: (BuildContext context) {
                        return AddShiftBottomSheet(
                          dayOfTheShift: id,);
                      });
                },

然后在AddshiftBottomSheet(这是另一个文件中的有状态小部件)内部,我调用一个showModalBottomSheet来显示TimePicker

class AddShiftBottomSheet extends StatefulWidget {

 @override
  Widget build(BuildContext context) {

DateTime _startDateTime;

...

Text("${DateFormat("HH:mm").format(_startDateTime)}",showModalBottomSheet(
                              
                         context: context,builder: (BuildContext context) {
                                return Container(
                                  height: 200,color: Colors.white,child: CupertinoDatePicker(
                                    onDateTimeChanged: (dateTime) {
                                      setState(() {
                                        _startDateTime = dateTime;
                                      });

                                      print(_startDateTime);
                                    },

问题在于,当我使用TimePicker更改时间时,应显示_startDateTime的Text()不会更改,并保持显示其初始值。 使用print语句,我看到变量_startDateTime随其应有的变化,并且setState被触发,但什么也没有发生。

一种奇怪的行为:如果我在_startDateTime变量之间,但是:

class AddShiftBottomSheet extends StatefulWidget {
 @override
  _AddShiftBottomSheetState createState() => _AddShiftBottomSheetState();
}

//here
DateTime = _startDateTime;

class _AddShiftBottomSheetState extends State<AddShiftBottomSheet> {

一切正常。

enter image description here

解决方法

从构建方法中删除DateTime _startDateTime;并在类范围内定义它:

class AddShiftBottomSheet extends StatefulWidget {

DateTime _startDateTime;

 @override
  Widget build(BuildContext context) {
...

当您调用setState时,在定义了_startDateTime的地方再次调用了构建方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。