【问题标题】:flutter TextField not be updated颤动的TextField没有被更新
【发布时间】:2020-12-18 16:04:52
【问题描述】:

我使用颤振创建了一个应用程序。该应用程序运行良好,但一项重要功能不起作用。当我从 Firestore 数据库中检索数据并在列表视图中显示记录时,我想单击任何记录并转到可以编辑记录的屏幕。单击记录并导航到编辑页面可以正常工作,但是数据不会填充到 TextField 中。当我调试应用程序时,数据就在那里,但 TextFields 永远不会填充数据。下面是我的一些代码。

这是编辑页面 '''

  // existing record: Put data from database into the TextFields
  // Updates Controllers
  clientFNameController.text = widget.trxns.clientFName;

  // Updates State
  new Future.delayed(Duration.zero, () {
    final trxnProvider = Provider.of<TrxnProvider>(context, listen: false);
    trxnProvider.loadValues(widget.trxns);
  });


super.initState();

 @override
 Widget build(BuildContext context) {
  final trxnProvider = Provider.of<TrxnProvider>(context);
  final trxns = Provider.of<List<Trxns>>(context);


TextField(
            textAlign: TextAlign.center,
            onChanged: (value) {
              trxnProvider.changeclientLName(value, loggedInUid);
            },
            decoration:
                kTextFieldDecoration.copyWith(hintText: 'Client Last Name'),
          ),

'''

这是提供者类 '''

class TrxnProvider with ChangeNotifier {
   final firestoreService = FirestoreService();
   String _clientLName;

   String get clientLName => _clientLName;

loadValues(Trxns trxns) {
  _clientLName = trxns.clientLName;
}

'''

【问题讨论】:

  • 也许您忘记将clientFNameController 分配给TextField
  • 为什么在initState之外还有super.initState?
  • 很抱歉没有在我的帖子中提供所有细节。 super.initstate 在 initState 中。此代码也在 initState 中:clientLNameController.text = widget.trxns.clientLName;

标签: flutter textfield


【解决方案1】:

在您实例化控制器的部分,将初始数据放在那里:

final clientFNameController = TextEditingController(text: widget.trxns.clientFName); 

另一方面,如果您使用 Provider 管理状态,我真的建议您尽量不要使用 StafulWidget 并将控制器放在 TrxnProvider 类上。

【讨论】:

  • 感谢您的回复。那么,我可以简单地从 StatefulWidget 到 StatelessWidget 吗? “在 TrxnProvider 类上拥有控制器”是什么意思?我对这一切都不熟悉。
  • 是的,如果你应用类 TrxnProvider 是因为它将管理任何可变变量,所以在主要情况下你将不再需要有状态。因此,当您 notifyListeners 时,无论该实例的侦听器存在于何处,ui 都会被重建...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2021-03-27
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
相关资源
最近更新 更多