我使用 go router 进行导航,使用提供程序进行状态管理。 当我编辑电话字段时,它会成功更新并在屏幕上显示正确的电话号码。 但如果我将电话字段留空,它不会显示空电话字段。相反,旧的电话号码仍然保留在屏幕上。我错过了什么?
Text(
user.phoneNumber != null
? 'Telefon: ${user.phoneNumber}'
: 'You can add your phone number here',
style: const TextStyle(fontSize: 16, color: Colors.black),
),
要更新电话号码,我使用类似的东西;
{
// Update Firebase doc
await FirebaseFirestore.instance
.collection('users')
.doc(firebaseUser.uid)
.update({
'username': _nameController.text,
'useremail': _emailController.text,
'bio': _bioController.text.isEmpty ? null : _bioController.text,
'phoneNumber': _phoneController.text.isEmpty
? null
: int.tryParse(_phoneController.text),
});
确保您的状态管理解决方案(提供程序)正确地向侦听器通知更改。当状态改变时,你应该使用notifyListeners()或类似的方法来更新你的UI
Consumer<UserProvider>(
builder: (context, userProvider, child) {
final user = userProvider.user;
return Text(
user.phoneNumber != null
? 'Telefon: ${user.phoneNumber}'
: 'You can add your phone number here',
style: const TextStyle(fontSize: 16, color: Colors.black),
);
},
),
也更新
// Update Firebase doc
await FirebaseFirestore.instance
.collection('users')
.doc(firebaseUser.uid)
.update({
'username': _nameController.text,
'useremail': _emailController.text,
'bio': _bioController.text.isEmpty ? null : _bioController.text,
'phoneNumber': _phoneController.text.isEmpty
? null
: _phoneController.text, // Store as string if necessary
});