我已经为应用程序创建了身份验证模块,但是现在我想检索数据并可能对其进行修改。
我已经做到了:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:harcelementapp/authentification/controlAuth.dart';
import 'package:provider/provider.dart';
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
@override
Widget build(BuildContext context) {
Utilisateur _utilisateurDeFirebaseUser(FirebaseUser user){
return user != null ? Utilisateur(idUtil: user.uid) : null;
}
var utilisateur = Provider.of<FirebaseUser>(context);
final db = DataService();
child: Scaffold(
appBar: new AppBar(
title: Text('Test'),
),
body: StreamBuilder(
stream: Firestore.instance.collection('utilisateurs').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Text('loading');
return Column(
children: <Widget>[
StreamProvider<Personne>.value(
stream: db.streamPersonne(user), // All children will have access to SuperHero data
child: Text('here i would like to show name or email or role for example. juste choose one information from current user data'),
),
]
);
}
)
);
}
}
class Personne {
final String userId;
final String nom;
final String mail;
final String tel;
final String role;
Personne({this.userId, this.nom, this.mail, this.tel, this.role});
factory Personne.fromFirestore(DocumentSnapshot doc) {
Map data = doc.data;
return Personne(
userId: doc.documentID,
nom: data['nomComplet'],
mail: data['emailUtil'],
tel: data['numeroTel'],
role: data['userRole'],
);
}
}
class DataService {
final Firestore _db = Firestore.instance;
Stream<Personne> streamPersonne(String id) {
return _db
.collection('utilisateurs')
.document(id)
.snapshots()
.map((snap) => Personne.fromMap(snap.data));
}
}
我知道这真的没有道理,但是我对库的某些部分有些困惑。 我想从我的当前用户中提取经过数据库验证的信息。然后将这些信息放入对象中,以便在需要时可以访问所有信息。如果我只想打印名称,我会考虑“ text(object.name)”之类的东西。
我在不同的网站上尝试了许多不同的东西,然后变得混乱,我认为我正在混搭几个概念。