flutter - Flutter/Dart如何选择日期并使用选择填充文本字段

标签 flutter dart

我正在尝试让用户将日期添加到我的应用程序中的列表中,并且设法创建了文本字段以及日期选择器。我正在努力将所选日期的值设置为变量,并在用户选择一个时填充文本字段。我尝试从_selectDate访问_date值,但是仍然没有任何内容填充我的TextField。
这是我的代码:

class DatesToRemember extends StatefulWidget {
  @override
  _DatesToRememberState createState() => _DatesToRememberState();
}

class _DatesToRememberState extends State<DatesToRemember> {


  DateTime selectedDate = DateTime.now();
  TextEditingController _date = new TextEditingController();

  Future<Null> _selectDate(BuildContext context) async {
    DateFormat formatter =
    DateFormat('dd/MM/yyyy'); //specifies day/month/year format

    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: selectedDate,
        firstDate: DateTime(1901, 1),
        builder: (BuildContext context, Widget child) {
          return Theme(
            data: ThemeData.light().copyWith(
              colorScheme: ColorScheme.light(
                primary: kPrimaryColor,
                onPrimary: Colors.black,
              ),
              buttonTheme: ButtonThemeData(
                colorScheme: Theme.of(context)
                    .colorScheme
                    .copyWith(primary: Colors.black),
              ),
            ),
            child: child,
          );
        },
        lastDate: DateTime(2100));

    if (picked != null && picked != selectedDate)
      setState(() {
        selectedDate = picked;
        _date.value = TextEditingValue(
            text: formatter.format(
                picked));//Use formatter to format selected date and assign to text field
      });
    return _date;
  }      
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          leading: GestureDetector(
              onTap: () => Navigator.pop(context),
              child: Icon(Icons.arrow_back)),
          title: Text('Dates to Remember'),
        ),
        backgroundColor: Colors.white,
        body: Center(
          child: Column(children: [
            SizedBox(
              height: 10.0,
            ),
            Container(
              width: MediaQuery.of(context).size.width * 0.8,
              child: Text(
                "It can be difficult to ",
                style: TextStyle(fontFamily: FontNameDefault),
              ),
            ),
            SizedBox(
              height: 50.0,
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Align(
                alignment: Alignment.centerRight,
                child: FloatingActionButton(
                    backgroundColor: kPrimaryColor,
                    child: Icon(Icons.add),
                    onPressed: () {
                  showDialog(
                      context: context,
                      builder: (BuildContext context) {
                        return AlertDialog(
                          title: Text('Add occasion'),
                          content: Container(
                            height: 150.0,
                            child: Column(
                              children: [
                                TextField(
                                  onChanged: (String value) {
                                    input = value;
                                  },
                                  decoration: InputDecoration(
                                    hintText: 'Occasion Title'
                                  ),
                                ),
                                TextField(
                                  decoration: InputDecoration(
                                      hintText: 'Pick Date'
                                  ),
                                  onTap: () => _selectDate(context),

                                ),
                                FlatButton(
                                  child: Text('Add'),
                                  onPressed: () {
                                    setState(() {
                                      occasions.add(input);
                                    });
                                    Navigator.of(context).pop();
                                  },
                                ),
                              ],
                            ),
                          ),
 
                        );
                      });
                }),
              ),
            ),
            Container(
              height: MediaQuery.of(context).size.height * 0.6,
              width: MediaQuery.of(context).size.width * 0.9,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.black26)
              ),
              child:
              occasions.isEmpty? Center(child: Text('Add an occasion', style: TextStyle(
                color: Colors.black
              ),)) : ListView.builder(
                  itemCount: occasions.length,
                  itemBuilder: (BuildContext context, int index) {
                    return
                      Dismissible(
                        direction: DismissDirection.endToStart,
                      onDismissed: (direction) {
                        occasions.removeAt(index);
                        Scaffold.of(context).showSnackBar(new SnackBar(
                          content: Text('Occasion Removed'),
                          duration: Duration(seconds: 5),
                        ));
                      },
                      key: UniqueKey(),
                      child: Card(
                        elevation: 8.0,
                        margin: EdgeInsets.all(8),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(8),
                        ),
                        child: ListTile(
                          title: Text(occasions[index]),
                          trailing: IconButton(
                            icon: Icon(
                              Icons.delete,
                              color: Colors.red,
                            ),
                            onPressed: ()  {
                              setState(() {
                                occasions.removeAt(index);
                                Scaffold.of(context).showSnackBar(new SnackBar(
                                  content: Text('Occasion Removed'),
                                  duration: Duration(seconds: 5),
                                ));
                              });
                            },
                          ),
                        ),
                      ),
                    );
                  }),
            )
          ]),
        ));
  }
}
有人可以帮忙吗?谢谢

最佳答案

在下面尝试我的代码:

DateTime valueDate = DateTime.now();


Row(
      children: <Widget>[
        Container(
          child: Padding(
            padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 0),
            child: Text("${valueDate.toLocal()}".split(' ')[0]),
          ),
          decoration: BoxDecoration(
              border: Border(
            bottom: BorderSide(
              color: Theme.of(context).accentColor,
              width: 2.5,
            ),
          )),
          width: 270,
        ),
        RaisedButton(
          child: Icon(Icons.date_range),
          onPressed: () => _selectDate(context),
        )
      ],
    );
功能 :
Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(context: context, initialDate: valueDate, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
    if (picked != null && picked != valueDate)
      setState(() {
        valueDate = picked;
      });
  }

关于flutter - Flutter/Dart如何选择日期并使用选择填充文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63564428/

相关文章:

flutter - 在Dart中是否使用wait with return有区别吗?

command-line - 在Dart中使用子命令实现控制台应用程序的最简单方法是什么?

rest - http 使用 application/json 内容类型发布 map 对象

flutter - 如何将容器的高度定义为默认值或什么都不定义

dart - 如何在使用 StreamBuilder 时用户离线时显示不同的 Widget?

flutter - 在PageView中点击按钮如何进入页面?

android - flutter :- Inside the PageView Image is not setting to fit the screen on width?

flutter - BottomNavigationBar 标题未显示在 Flutter 中

Flutter:关闭应用程序后播放音乐

flutter - 如何在 flutter 的Listview中显示字符串列表