在我尝试设置配置文件管理时如何正确使用提供程序?
Posted
技术标签:
【中文标题】在我尝试设置配置文件管理时如何正确使用提供程序?【英文标题】:How to use provider correctly while I'm tryng to set a profile management? 【发布时间】:2021-10-24 05:08:07 【问题描述】:我正在尝试使用提供程序来获取有关用户的不同信息(实际上是 uid),但它不起作用,因为 .auth
没有为“AuthClass”类型定义,顺便说一下,我放置了 AuthClass 因为我的代码在那里,但我不确定这是好课。我寻找解决方案,他们说我们必须使用我们的提供者身份验证类,但我不知道在哪里可以找到它。也许你可以帮助我
这是我的代码(.auth 带有红色下划线):
body: SingleChildScrollView(
child: Column(
children: <Widget> [
FutureBuilder(
future: Provider.of<AuthClass>(context).auth.inputData(),
builder: ( context, snapshot)
if (snapshot.connectionState == ConnectionState.done)
return Text("$snapshot.data");
else
return Text("Loading...");
,
)
]
)
)
这是我的代码中包含 inputData() 的另一部分:
import 'package:firebase_auth/firebase_auth.dart';
class AuthClass
final FirebaseAuth _auth = FirebaseAuth.instance;
void inputData() async
final User? user = _auth.currentUser;
final uid = user!.uid;
print(uid);
【问题讨论】:
【参考方案1】:为了使用Provider,你应该修改你的代码如下:
-
修改 AuthClass:
class AuthClass extends ChangeNotifier
final FirebaseAuth _auth = FirebaseAuth.instance;
Future<bool> inputData() async
final User? user = await _auth.currentUser;
final uid = user!.uid;
print(uid);
return true;
-
使用它:
Provider.of<AuthClass>(context).inputData(), // .auth is redundant
-
确保您已在主文件中定义了提供程序:
ChangeNotifierProvider(
create: (context) => AuthClass(),
child: const MyApp(),
),
您还应该将 Provider
包添加到您的依赖项中。
【讨论】:
我已经完成了所有操作,但是当我删除 .auth 时,您的第二步出现了最后一个错误:此表达式的类型为“void”,因此无法使用其值。 正是由于这个事实,FutureBuilder
中的future
需要一个 Future 函数,我已经更新了我的答案(参见步骤 1)。我假设 _auth.currentUser
是一个异步方法,因为您已经为此函数使用了 async
修饰符。您可以查看结果并根据您的决定返回true
或false
。
有效!我没有更多错误,唯一的问题是它在我的控制台上打印了 id,但在我的屏幕上打印了文本“true”。感谢您的宝贵时间
这是因为我在提供程序中返回了一个布尔值,仅作为示例,您可以返回接收到的响应或其他任何内容。如果您将我的答案设置为可接受的解决方案,如果对您有帮助,我将不胜感激。 @flomitri
没问题 :) !但是您如何返回收到的响应,因为我尝试了 return _auth.currentUser.uid
但它不起作用,我真的是初次亮相,我将 bool 更改为 String以上是关于在我尝试设置配置文件管理时如何正确使用提供程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Nuxt 应用程序中正确设置 bootstrap-vue?