问题描述
在我的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> {
一切正常。
解决方法
从构建方法中删除DateTime _startDateTime;
并在类范围内定义它:
class AddShiftBottomSheet extends StatefulWidget {
DateTime _startDateTime;
@override
Widget build(BuildContext context) {
...
当您调用setState
时,在定义了_startDateTime
的地方再次调用了构建方法。