我试图找到/理解一个简单的颤振概念。我有一个包含日期选择器的表单,该日期选择器是一个有状态的小部件,在点击时会打开选择日期菜单。我希望在用户点击键盘上的“下一个”时也可以打开它(转到下一个字段,即日期选择器)。
...
TextFormField(
...
textInputAction: TextInputAction.next,
focusNode: _focusNodeItem,
onFieldSubmitted: (value) {
_focusNodeItem.unfocus();
// TODO: open datePicker from here
},
...
),
DatePicker(
date: _reminder.expires,
selectDate: (date) {
setState(() {
_reminder =
_reminder.copy(expires: date.toString());
});
},
)
...
Datepicker小部件是这样的:
class DatePicker extends StatefulWidget {
final String date;
final ValueChanged<DateTime> selectDate;
DatePicker({Key key, this.date, this.selectDate}) : super(key: key);
@override
_DatePickerState createState() => _DatePickerState();
}
class _DatePickerState extends State<DatePicker> {
...
void openDatePicker() {
showCupertinoModalPopup<void>(
context: context,
builder: (BuildContext context) {
return _buildBottomPicker(
CupertinoDatePicker(
mode: CupertinoDatePickerMode.date,
initialDateTime: date,
onDateTimeChanged: (DateTime newDateTime) {
setState(() {
date = newDateTime;
widget.selectDate(newDateTime);
});
},
),
);
},
);
}
...
}
我知道小部件不应该彼此“弄乱”,但是像这样的简单情况呢?
是否有一种简单(正确)的方法来从父窗口小部件调用openDatePicker()?