Flutter中如何同步两个TextField

Posted

技术标签:

【中文标题】Flutter中如何同步两个TextField【英文标题】:How to synchronise two TextFields in Flutter 【发布时间】:2021-04-27 09:57:06 【问题描述】:

假设我在 Flutter 中呈现了两个文本字段:“净价”和“总价”。我想同步它们,所以当用户更新净价时,会自动计算和更新总价。当用户更改总价时,应更新净价字段。如何在 Flutter 中实现这种行为?

【问题讨论】:

使用TextEditingControllers。由于您的 TextFields 可能驻留在同一个小部件中,我认为 Provider 在这里有点过分...... 【参考方案1】:

我建议使用provider package 来解决这个问题。

基本上,您创建一个扩展 ChangeNotifier 的类并保存两个 TextField 的值,然后为两个 Text 小部件提供它,在一个公共父小部件的某处:

ChangeNotifierProvider(
  create: (context) => MyClass(),
  child: MyApp(),
),

现在,每当您更改其中一个 TextField 时,只需从 MyClass 调用一个函数,该函数计算另一个 TextField 的新值应该是什么。 例如:

void calculate() 
    // Some calculation and updating the values of the TextFields
    notifyListeners();
  

注意notifyListeners() 调用,它告诉正在侦听此模型的小部件进行重建。

要收听此模型,请将您的 Text 小部件包装在消费者中,例如:

return Consumer<MyClass>(
builder: (context, myClass, child) 
  return Text("Total price: $myClass.netPrice");
);

你可以从flutter状态管理tutorial了解更多

【讨论】:

以上是关于Flutter中如何同步两个TextField的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中删除两个容器之间的空间?

如何在 Flutter 的同一屏幕中管理两个带有数据的 ListView

如何将两个文本集中在Flutter中

如何在 Flutter 中收听抽屉打开/关闭动画

如何使用 Flutter 从 Firebase 中的两个集合中获取数据

Flutter 等待 Provider 准备好在 multiprovider 中