如何使用 Provider 提供初始值并将更改的值保存在 TextFields 中?

问题描述 投票:0回答:1

我有一个带有简单数据模型的应用程序

    Note(
      String title,
      String content
    )

我要问的 UI 部分基本上是一个

Row
,其中
ListView
Column
旁边显示注释标题,其中
TextFields
表示所选注释的标题和内容。

    Row (
      children: [
        ListView(),
        Column(
          children: [
            TextField(),
            TextField(),
            ]
        ),
      ],
    )

两个

TextFields
都有关联的
TextEditingControllers

我正在使用

Provider
管理状态。

我希望能够做两件事:

  1. 当用户点击
    ListView
    项目时,相应的注释会显示在
    TextFields
  2. 当用户更改
    TextFields
    中的文本时,
    Provider
    会更新并保存注释列表(我编写的 Provider 更新方法工作正常,这不是问题)。

现在我通过

TextField
onChanged
事件执行#2,例如,

    onChanged: (value) {
      context.read<Data>().update(content: value);
  },

但是我尝试执行#1 的所有方法都涉及在小部件

TextEditingController.text
过程中设置
build
值。 正如我几天前了解到的那样,这会导致问题。当用户在
TextField
中的某处键入字母时,
Provider
会更新并通知其侦听器,
TextField
会重建,并且它们的光标会跳转到文本的开头。这是不可取的:-)

如何使用

Provider
提供初始值并将更改的值保存在
TextField
中?

flutter textfield onchange provider flutter-provider
1个回答
0
投票

设置listen true,它将持续监听您的提供商,就像网络套接字或流一样。

context.read<Data>().update(content: value, listen:true).

此外,您在提供程序中创建字符串类型变量,如果可能的话,为它们分配一些初始值。之后,当页面构建时,获取这些变量的值并将它们分配给您的文本编辑控制器。希望它能解决这个问题对我来说有点难理解,如果你需要任何帮助,我今天有空,你可以通过评论来问我。

© www.soinside.com 2019 - 2024. All rights reserved.