Flatter If Statement внутри виджета при рендеринге Text - PullRequest
0 голосов
/ 15 марта 2020

Мне было интересно, как использовать операторы if в виджетах во Flutter.

Приведенный ниже код предлагает пользователю выбрать диапазон дат с помощью пакета DateRange. Я пытаюсь получить введенную дату и распечатать ее с помощью текста (...).

Однако оператор if, который я использую:

        Text((() {
          if(condition){
            return habitDates[0].toString() + "to " + habitDates[1].toString();}
          return "Pick Date";
        })()),

, похоже, не обновляется (это постоянно «Дата выбора»), и я предполагаю, что это проблема, связанная с состоянием виджета. ,

Ниже приведен полный код:

class DateRange extends StatefulWidget {
  @override
  _DateRangeState createState() => _DateRangeState();
}

class _DateRangeState extends State<DateRange> {

  List<DateTime> habitDates = [];

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        MaterialButton(
        color: Colors.grey[700],
        onPressed: () async {
          final List<DateTime> picked = await DateRagePicker.showDatePicker(
              context: context,
              initialFirstDate: new DateTime.now(),
              initialLastDate: (new DateTime.now()),
              firstDate: new DateTime(2020),
              lastDate: new DateTime(2030),
          );
          if (picked != null && picked.length == 2) {
            picked.forEach((date) {
              habitDates.add(date);
              print(habitDates);
              }
            );
          }
        },
        child: Text("Pick date range", style: TextStyle(color: Colors.white),)
        ),
        Text((() {
          if(habitDates != null && habitDates.length == 2){
            return habitDates[0].toString() + "to " + habitDates[1].toString();}
          return "Pick Date";
        })()),
      ],
    );
  }
}

1 Ответ

0 голосов
/ 15 марта 2020

Вы можете вызвать setState (() {...}); для обновления вашего текстового виджета. Вот так.

if (picked != null && picked.length == 2) {
  setState(() {
    picked.forEach((date) {
      habitDates.add(date);
      print(habitDates);
    });
  });
}
...