You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter报错:实例成员updateUser无法通过静态访问如何解决

报错原因

Instance member 'updateUser' can't be accessed using static access.报错的触发原因是:你直接通过类名AuthProvider调用了归属于类实例的成员方法updateUser。实例方法本身就依赖类实例化后持有的成员变量(比如你方法内用到的多个TextController),完全不需要强行把它改成静态方法,只要调整调用逻辑即可解决问题。

解决方案

1. 调整方法调用方式

不要直接用类名做静态调用,先获取AuthProvider的实例对象,再通过实例调用updateUser方法,根据你的项目架构可以选择对应实现:

  • 如果你使用Provider做状态管理(从类名判断是绝大多数Flutter项目的常规用法),将按钮的onPressed逻辑替换为以下代码即可:
Padding(
  padding: const EdgeInsets.all(8.0),
  child: ElevatedButton(
    child: Text("Bearbeiten"),
    onPressed: () async {
      if (_formKey.currentState.validate()) {
        // 获取当前上下文里的AuthProvider实例,listen: false表示此处不需要触发页面刷新
        final authProvider = Provider.of<AuthProvider>(context, listen: false);
        await authProvider.updateUser(
          '1xorAjA7hRZfOdN3zpkAWI7spgp1',
          _birthDateInString,
          genderSelected, 
          roleSelected
        );
        _formKey.currentState.save();
        Navigator.of(context).pop();
      }
    },
  ),
)
  • 如果你给AuthProvider实现了单例模式,可以直接通过单例实例调用,格式为AuthProvider.instance.updateUser(...),但这种方式灵活性较差,不符合状态管理最佳实践,不推荐优先使用。
  • 如果没有使用任何状态管理,只需要在当前页面的State类中提前初始化AuthProvider实例:final AuthProvider authProvider = AuthProvider();,后续通过这个实例调用方法即可。

2. 修复方法内的隐藏逻辑bug

你当前写的updateUser方法存在数据写入错误:直接把TextController对象本身存入了Firestore,而不是用户实际输入的文本内容,需要给所有控制器对象加上.text属性获取输入值,修正后的方法代码如下:

Future<void> updateUser(String id, String birthday, String gender, String role) async {
  return await FirebaseFirestore.instance
      .collection('admins')
      .doc(id)
      .update({
        'username': usernameController.text,
        'email': emailController.text,
        'first name': firstNameController.text,
        'last name': lastNameController.text,
        'birthday': birthday,
        'gender': gender,
        'role': role,
      })
      .then((value) => print("User Updated"))
      .catchError((error) => print("Failed to update user: $error"));
}

内容的提问来源于stack exchange,提问作者albaum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 21:45:38