使用 Obx 更改数据时无法更新小部件

Can not update widget when data changed using Obx

这是我的看法

Widget build(BuildContext context) {
return Row(
  children: [
    Expanded(
      flex: 3,
      child: Obx(
        () => TextFieldWidget(
            control: from,
            obsure: false,
            text: DateFormat('dd-MM-yyyy').format(controller.dateRange.value.start).toString(),
            callBackFunc: () async{
              controller.showDatePicker();
            },
            hint: true,),
        ),
    ),
    const Expanded(flex: 1, child: Icon(Icons.arrow_right_alt)),
    Expanded(
      flex: 3,
      child: Obx(
        () => TextFieldWidget(
            control: to,
            obsure: false,
            text: DateFormat('dd-MM-yyyy').format(controller.dateRange.value.end).toString(),
            callBackFunc: () async{
              controller.showDatePicker();
            },
            hint: true,),
      ),
    ),
    //TextFieldWidget(control:to_controller,obsure:false,text:'To'),
  ],
)};

我的控制器

Future showDatePicker() async{
final NewdateRange = await showDateRangePicker(
  context: Get.context!, 
  firstDate: DateTime(DateTime.now().year-1),
  lastDate: DateTime(DateTime.now().year+1),
  initialDateRange: dateRange.value,
  
);
if(NewdateRange != null && NewdateRange != dateRange.value){
  dateRange.value = NewdateRange;
  update();
}}

我创建的文本字段小部件

Widget build(BuildContext context) {
return TextFormField(
  controller: control,
  obscureText: obsure,
  onTap: callBackFunc,
  onChanged: (text) => TextFieldWidget,
  style: TextStyle(fontSize: 13),
  decoration: InputDecoration(
    labelText: text,
    hintText: hint?text:'',
    border: OutlineInputBorder(),
    contentPadding: const EdgeInsets.all(10),
  ),
)};

我是 flutter 新手,当我在文本字段上切换时,显示了日期选择器,但是当我保存标签文本和提示文本时没有更新新日期我被选择了??对不起我糟糕的英语。请帮帮我!!!

在你提供完整的代码之前,我只能说一个TextField只有在第一次通过控制器构建时才会改变值,这里TextFieldWidget.text是在[=时改变的13=] 从 Obx 更改而来,但这不会 re-initialize 您的 TextEditingController 因此 TextField 中的值不会改变。

要解决这个问题,您需要监听变化并在didUpdateWidget中调用control.text = newText

TextFieldWidget

@override
void didUpdateWidget(Widget oldWidget) {
  if (oldWidget.text != widget.text) {
    control.text = widget.text;
  }
}
...