从InkWell的onTap调用Future <null>函数

时间:2018-04-11 09:49:20

标签: flutter

我已经创建了一个带有onTap函数调用的InkWell

new InkWell(onTap: _handleSelectedDate,
            ...
           )

句柄_handleSelectedDate被定义为Future,如下所示

Future<Null> _handleSelectedDate(BuildContext context, AppModel model) async {
    var endYear = new DateTime.now().year + 10;
    var startYear = new DateTime.now().year - 100;
    DateTime picked = await showDatePicker(
        context: context,
        initialDate: model.trackDate,
        firstDate: new DateTime(startYear, 1),
        lastDate: new DateTime(endYear));
        if (picked != null) {
           if (picked != model.trackDate) {
              model.setTrackDate(picked);
        }
}

}

如果我在没有参数的情况下调用_handleSelectedDate,则调用有效,但我需要能够将BuildContext和我的Pages模型数据传递给它。一旦我这样做,我得到以下构建错误。

error: The argument type '(BuildContext, AppModel) → Future<Null>' 
can't be assigned to the parameter type '() → void'. 

我不知道如何解决这个问题。我只需要一种方法将数据传递给调用,以便我可以引用我的模型数据(我正在尝试使用scoped_model)

2 个答案:

答案 0 :(得分:2)

你可以将你的电话包裹在一个闭包

new InkWell(
  onTap: () => _handleSelectedDate(context, myModel),
)

答案 1 :(得分:2)

呼唤未来的正确方法是

new InkWell(
  onTap: () async => await _handleSelectedDate(context, myModel),
)