代码之家  ›  专栏  ›  技术社区  ›  Ale

自定义回调中的Flutter小部件返回值

  •  0
  • Ale  · 技术社区  · 5 年前

    我创造了自己的 Widget 其中包括 DatePicker ,这里是代码:

    class DatePicker extends StatelessWidget {
      final Icon icon;
      final DateTime initialDate;
      final ValueChanged<DateTime> onDateSelected;
    
      DatePicker({this.icon = const Icon(Icons.date_range), @required this.initialDate, this.onDateSelected});
    
      Future<Null> _selectDate(BuildContext context) async {
        final DateTime picked = await showDatePicker(context: context, initialDate: initialDate, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
        if (picked != null && picked != initialDate) {
          // TODO: return the picked value in the 'OnDateSelect' callback
          print(picked.toString());
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Row(
          children: <Widget>[
            Text(initialDate.toString()),
            IconButton(
              icon: this.icon,
              onPressed: () => _selectDate(context),
            )
          ],
        );
      }
    }
    

    我想这样使用它:

    DatePicker(
          initialDate: _ticketDate,
          onDateSelected: (newDate) {
            print(newDate);
          },
        );
    

    我不知道的是如何返回在自定义中选择的日期 onDateSelected 回拨一次 Future<Null> _selectDate 已经被处决。

    有什么想法吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Benjamin user12576004    5 年前

    很简单:

    您所做的只是调用小部件提供的函数并提供参数,在本例中是选择的日期。

      Future<void> _selectDate(BuildContext context) async {
        final DateTime picked = await showDatePicker(
            context: context,
            initialDate: initialDate,
            firstDate: DateTime(2015, 8),
            lastDate: DateTime(2101));
        if (picked != null && picked != initialDate) {
          onDateSelected(picked); // just do this
        }
      }