如何正确地将函数从父窗口小部件调用到子窗口小部件?

时间:2018-12-24 21:21:12

标签: dart flutter

我试图找到/理解一个简单的颤振概念。我有一个包含日期选择器的表单,该日期选择器是一个有状态的小部件,在点击时会打开选择日期菜单。我希望在用户点击键盘上的“下一个”时也可以打开它(转到下一个字段,即日期选择器)。

...
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()?

0 个答案:

没有答案