在我的 SingleDayCalendarView() 中,我有一个按钮调用 showModalBottomSheet() 并以 AddShiftBottomSheet 作为其子项:
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> {
一切正常。