TextEditingController返回旧值

时间:2020-07-16 18:52:34

标签: flutter flutter-layout

在StatefulWidget小部件中,我有一个TextFormField及其控制器,如下所示:

class _RequestInfoWidgetState extends State<RequestInfoWidget> {
  TextEditingController requestInfoCtl1;
  @override
  void initState() {
    requestInfoCtl1 = TextEditingController();
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        TextFormField(
          onTap: () {
            FocusScope.of(context).requestFocus(FocusNode());
            _showBottomSheetDates(context, requestInfoCtl1);
          },
          controller: requestInfoCtl1,
          enableInteractiveSelection: false,
          keyboardType: TextInputType.numberWithOptions(),
          decoration: InputDecoration(
              labelText: "Start Date",
              contentPadding: const EdgeInsets.all(10.0)),
        ),

在调用TextFiled _showBottomSheetDates时,我在模式底部显示我的日期选择器:

  _showBottomSheetDates(BuildContext cntext, TextEditingController controller) {
    showModalBottomSheetCustom(
        context: cntext,
        mHeight: 0.95,
        builder: (BuildContext context) {
          return initDatePicker(controller);
        });
  }

  initDatePicker(TextEditingController controller) {
    persianDatePicker = PersianDatePicker(
      controller: controller,
      datetime: Jalali.now().toString(),
      fontFamily: 'IranSans',
      farsiDigits: true,
      onChange: (String oldText, String newText) {
        controller.text = newText;
      },
    ).init();
    return persianDatePicker;
  }

但是当我从DatePicker中选择日期并关闭BottomSheet时,requestInfoCtl1的值将返回旧值而新值不见了?

1 个答案:

答案 0 :(得分:0)

尝试并检查

setState(() {
  controller.text = newText;
});