当文本字段留空时,个人资料屏幕不会更新用户界面

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

我使用 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),
          });
flutter dart flutter-go-router
1个回答
0
投票

确保您的状态管理解决方案(提供程序)正确地向侦听器通知更改。当状态改变时,你应该使用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
});
© www.soinside.com 2019 - 2024. All rights reserved.