Я пытался получить данные из магазина, используя пакет поставщика для создания страницы профиля. У меня нет красной ошибки на экране, он может выбирать данные из пользовательского интерфейса, но не отображает данные на другой странице. Я пробовал много раз, но я думаю, что мой код базы данных для потоковой передачи данных неверен. Я не знаю, как мне писать коды для потоковой передачи данных в пользовательский интерфейс?
class DatabaseGuru {
final String uid;
DatabaseGuru({this.uid});
final FirebaseAuth auth = FirebaseAuth.instance;
final CollectionReference dataGuru = Firestore.instance.collection('Guru');
// UPDATE DATA From UI
Future updateUserData(
String namaGuru,
String nipGuru,
String emailGuru,
String waliKelas,
) async {
FirebaseUser user = await auth.currentUser();
return await dataGuru.document(user.uid).setData({
'nama': namaGuru,
'nip': nipGuru,
'email': emailGuru,
'wali kelas': waliKelas,
});
}
// STREAM From Firestore to UI
DataGuru _dataGuruFromSnapshot(DocumentSnapshot snapshot) {
return DataGuru(
uid: uid,
namaGuru: 'nama',
nipGuru: 'nip',
emailGuru: 'email',
waliKelas: 'wali kelas',
);
}
Stream<DataGuru> get Guru {
return dataGuru.document(uid).snapshots().map(_dataGuruFromSnapshot);
}
// GET DATA FROM UI
DataGuru _userDataFromSnapshot(DocumentSnapshot snapshot) {
return DataGuru(
uid: uid,
namaGuru: snapshot.data['nama'],
nipGuru: snapshot.data['nip'],
emailGuru: snapshot.data['email'],
waliKelas: snapshot.data['wali kelas'],
);
}
Stream<DataGuru> get userData {
return dataGuru.document(uid).snapshots().map(_userDataFromSnapshot);
}
}
тем временем вот мой код пользовательского интерфейса
class ProfilGuru extends StatefulWidget {
@override
_ProfilGuruState createState() => _ProfilGuruState();
}
class _ProfilGuruState extends State<ProfilGuru> {
@override
Widget build(BuildContext context) {
final Guru = Provider.of<DataGuru>(context);
return Scaffold(
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: StreamBuilder(
builder: (context, _){
return DataProfil(guru: Guru);
},
),
),
floatingActionButton: FloatingActionButton(
backgroundColor: Color(0xFF3498BB),
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => ProfilEditor()));
},
child: Icon(
Icons.edit,
color: Colors.white,
)),
);
}
}
class DataProfil extends StatelessWidget {
final DataGuru guru;
DataProfil({this.guru});
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
SizedBox(
height: 16,
),
Stack(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
guru.namaGuru,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 20,
color: Colors.black87,
),
),
SizedBox(
height: 8.0,
),
Text(
'NIP: ' + guru.nipGuru,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 16,
color: Colors.black87),
)
],
),
),
CircleAvatar(
backgroundColor: Color(0xFF3498BB),
radius: 54,
child: Icon(
Icons.photo_camera,
color: Colors.white,
size: 40,
),
)
],
),
],
),
SizedBox(
height: 36,
),
subJudul(judul: 'EMAIL'),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Color(0xFF7f8c8d),
borderRadius: BorderRadius.circular(8.0)),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
guru.emailGuru,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 16,
color: Colors.white),
),
),
)
],
),
SizedBox(
height: 16,
),
Divider(
color: Color(0xFF7f8c8d),
),
SizedBox(
height: 16,
),
subJudul(judul: 'PELAJARAN'),
Container(
alignment: Alignment.centerLeft,
child: Wrap(
spacing: 8.0,
runSpacing: 8.0,
direction: Axis.horizontal,
runAlignment: WrapAlignment.start,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Color(0xFFd35400),
borderRadius: BorderRadius.circular(8.0)),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Bahasa Indonesia',
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 16,
color: Colors.white),
),
),
),
],
),
),
SizedBox(
height: 16,
),
Divider(
color: Color(0xFF7f8c8d),
),
SizedBox(
height: 16,
),
subJudul(
judul: 'WALI KELAS',
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Color(0xFF7f8c8d),
borderRadius: BorderRadius.circular(8.0)),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
guru.waliKelas,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 16,
color: Colors.white),
),
),
)
],
),
SizedBox(
height: 16,
),
]);
}
}