flutter 日期不能在屏幕上看到与setstate

ijxebb2r  于 2022-12-19  发布在  Flutter
关注(0)|答案(3)|浏览(138)
IconButton(
                onPressed: () async {
                  DateTime? x = await showDatePicker(
                      context: context,
                      initialDate: DateTime.now(),
                      firstDate: DateTime.now(),
                      lastDate: DateTime(2040));
                  if (x == null) return;
                  setState(() {
                    final DateFormat formatter = DateFormat('yyyy-MM-dd');
                    String formattedDate = formatter.format(x);
                    print(formattedDate);
                    print(formattedDate.runtimeType);
                  });
                },
                icon: const Icon(UniconsLine.clock)),
            Text(formattedDate ?? "EMPTY"),

我看到下面构建方法中的formattedDate变量总是为空,为什么此代码不工作

vc9ivgsu

vc9ivgsu1#

你能试着提升formatedDate吗?我想问题是你的变量超出了作用域。

class DatePicker extends StatefulWidget {
  const DatePicker({Key? key}) : super(key: key);

  @override
  State<DatePicker> createState() => _DatePickerState();
}

class _DatePickerState extends State<DatePicker> {
  String? formattedDate;
  @override
  Widget build(BuildContext context) {
    return Column(children: [
      IconButton(
          onPressed: () async {
            DateTime? x = await showDatePicker(
                context: context,
                initialDate: DateTime.now(),
                firstDate: DateTime.now(),
                lastDate: DateTime(2040));
            if (x == null) return;
            setState(() {
              final DateFormat formatter = DateFormat('yyyy-MM-dd');
              formattedDate = formatter.format(x);
              print(formattedDate);
              print(formattedDate.runtimeType);
            });
          },
          icon: const Icon(Icons.date_range)),
      Text(formattedDate ?? "EMPTY"),
    ]);
  }
}
gev0vcfq

gev0vcfq2#

问题出在变量formattedDate的作用域中。它只存在于setState中,因为它是在那里声明的。
在类的开头声明它。

qco9c6ql

qco9c6ql3#

您已经在setState()中将formattedDate重新定义为局部变量。您在Text(formattedDate ?? "EMPTY")中使用的字段formattedDate是一个完全不同的变量。它仍然为空,因为您根本没有更改它。只需删除formattedDate之前的String,它应该没有问题。

final DateFormat formatter = DateFormat('yyyy-MM-dd');
formattedDate = formatter.format(x); <-- This is your problem
print(formattedDate);

相关问题