Мне было интересно, как использовать операторы 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";
})()),
],
);
}
}