使用Provider实现用户资料管理时AuthClass的.auth属性未定义如何解决
问题原因
你遇到的报错是因为自定义的AuthClass类中没有名为auth的公开属性,你定义的_auth是私有成员,同时inputData()本身就是AuthClass的成员方法,不需要额外通过.auth调用。
修复步骤
- 第一步:修正调用逻辑
把报错行的.auth后缀删除,同时给Provider.of添加listen: false参数避免不必要的页面重建:
future: Provider.of<AuthClass>(context, listen: false).inputData(),
- 第二步:修正
inputData()方法的返回类型
你当前的inputData()返回值为void,FutureBuilder无法获取到uid的返回结果,需要修改为Future<String?>类型:
import 'package:firebase_auth/firebase_auth.dart'; class AuthClass { final FirebaseAuth _auth = FirebaseAuth.instance; Future<String?> inputData() async { final User? user = _auth.currentUser; if (user != null) { final uid = user.uid; print(uid); return uid; } return null; } }
- 第三步:确认Provider已正确注册
需要在应用的上层节点注册AuthClass的Provider,示例如下:
import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() { runApp( Provider<AuthClass>( create: (context) => AuthClass(), child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( // 你的应用配置 home: const YourHomePage(), ); } }
可选优化
如果需要实时监听用户的登录状态变化,可以直接使用Firebase Auth提供的authStateChanges()流配合StreamBuilder使用,不需要手动调用方法获取uid。
内容的提问来源于stack exchange,提问作者kernelrpc_mach_vm_protect
相关产品推荐
相关产品推荐

