繁体   English   中英

将 stateLessWidget 转换为 function

[英]Conver a stateLessWidget to function

我是一名新的 flutter 开发人员。 我有一个代码可以从 firebase 读取数据一次

这段代码:

class GetUserName extends StatelessWidget {
  final String documentId;

  GetUserName(this.documentId);

  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('users');

    return FutureBuilder<DocumentSnapshot>(
      future: users.doc(documentId).get(),
      builder:
          (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {

        if (snapshot.hasError) {
          return Text("Something went wrong");
        }

        if (snapshot.hasData && !snapshot.data!.exists) {
          return Text("Document does not exist");
        }

        if (snapshot.connectionState == ConnectionState.done) {
          Map<String, dynamic> data = snapshot.data!.data() as Map<String, dynamic>;
          return Text("Full Name: ${data['full_name']} ${data['last_name']}");
        }

        return Text("loading");
      },
    );
  }
}

它工作正常,但我想像这样将这些方法作为 function 放入我的 Provider

Future<DocumentSnapshot> getUserName(String uid) => _database.doc(uid).snapshots();

so I want to put a function into provider class when I call this function it return a field data of this documents... (Replace GetUserName class as shown app, to be a function method only)

那么如何编写此 function 以及如何将其称为 map 数据?


编辑:

如图所示:

在此处输入图像描述

在这里,我将数据作为 StreamBuilder 并且工作正常

这里是我的提供商 class 中 stream 的解释方法

在此处输入图像描述

在此处输入图像描述

如下图所示

在此处输入图像描述

Map<String, dynamic> data

我使用类似的数据

数据['用户名']

它工作正常,所以我想在 My Provider class 中放入 function 并返回一个字符串,例如有两个参数:

文本(我的函数(uid,值)); 它从(uid)返回一个字符串,value = data[value]

在 return HomePage() 之前添加它;

auth.userData = data;
return HomePage();

将其添加到身份验证提供程序中

class Auth implements AuthBase {
    Map<String,dynamic>? userData;
    String  getUserName(String parameter) {
    return userData![parameter].toString(); 
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM