我有一个带有简单数据模型的应用程序
Note(
String title,
String content
)
我要问的 UI 部分基本上是一个
Row
,其中 ListView
在 Column
旁边显示注释标题,其中 TextFields
表示所选注释的标题和内容。
Row (
children: [
ListView(),
Column(
children: [
TextField(),
TextField(),
]
),
],
)
两个
TextFields
都有关联的 TextEditingControllers
。
我正在使用
Provider
管理状态。
我希望能够做两件事:
ListView
项目时,相应的注释会显示在TextFields
TextFields
中的文本时,Provider
会更新并保存注释列表(我编写的 Provider 更新方法工作正常,这不是问题)。现在我通过
TextField
的 onChanged
事件执行#2,例如,
onChanged: (value) {
context.read<Data>().update(content: value);
},
但是我尝试执行#1 的所有方法都涉及在小部件
TextEditingController.text
过程中设置 build
值。 正如我几天前了解到的那样,这会导致问题。当用户在 TextField
中的某处键入字母时,Provider
会更新并通知其侦听器,TextField
会重建,并且它们的光标会跳转到文本的开头。这是不可取的:-)
如何使用
Provider
提供初始值并将更改的值保存在 TextField
中?
设置listen true,它将持续监听您的提供商,就像网络套接字或流一样。
context.read<Data>().update(content: value, listen:true).
此外,您在提供程序中创建字符串类型变量,如果可能的话,为它们分配一些初始值。之后,当页面构建时,获取这些变量的值并将它们分配给您的文本编辑控制器。希望它能解决这个问题对我来说有点难理解,如果你需要任何帮助,我今天有空,你可以通过评论来问我。