在我尝试设置配置文件管理时如何正确使用提供程序?

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 修饰符。您可以查看结果并根据您的决定返回truefalse 有效!我没有更多错误,唯一的问题是它在我的控制台上打印了 id,但在我的屏幕上打印了文本“true”。感谢您的宝贵时间 这是因为我在提供程序中返回了一个布尔值,仅作为示例,您可以返回接收到的响应或其他任何内容。如果您将我的答案设置为可接受的解决方案,如果对您有帮助,我将不胜感激。 @flomitri 没问题 :) !但是您如何返回收到的响应,因为我尝试了 return _auth.currentUser.uid 但它不起作用,我真的是初次亮相,我将 bool 更改为 String

以上是关于在我尝试设置配置文件管理时如何正确使用提供程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将设备添加到 Adhoc 分发配置文件

Windows2012R2 时间同步设置

Tkinter:如何正确设置扩展 Button 类的参数?

如何在我的 Nuxt 应用程序中正确设置 bootstrap-vue?

如何让 IIS 在我的网站上正确提供 .webmanifest 文件?

如何获取Windows资源管理器中使用的驱动器图标?