В моем поиске есть несколько способов сделать это. Одним из способов является использование FutureBuilder
и StreamBuilder
одновременно. Но я хочу избежать этой вложенности StreamBuilder внутри FutureBuilder?
Я попытался создать метод и вызвать его из потокового компоновщика.
_getData() async{
FirebaseUser user = await FirebaseAuth.instance.currentUser();
String uid = user.uid.toString();
var snapshots =
Firestore.instance.collection('userinfo').document(uid).snapshots();
return snapshots;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('Retrieve Text Input'),
),
body: new Container(
padding: EdgeInsets.only(top: 20.0, left: 10.0, right: 10.0),
child: new StreamBuilder(
stream: _getData(),
builder: (context, snapshot) {
if (snapshot.hasData) {
var userDocument = snapshot.data;
return new Column(
children: <Widget>[
TextFormField(
initialValue: userDocument["name"].toString(),
//controller: _AdContr,
decoration: new InputDecoration(
labelText: 'Name',
fillColor: Colors.white,
border: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(25.0),
borderSide: new BorderSide(),
),
//fillColor: Colors.green
),
),
SizedBox(height: 20),
TextFormField(
//initialValue: Text(userDocument["Surname"]).toString(),
//controller: _AdContr,
decoration: new InputDecoration(
labelText: 'Surname',
fillColor: Colors.white,
border: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(25.0),
borderSide: new BorderSide(),
),
//fillColor: Colors.green
),
)
],
);
}
}),
),
);
}
Но я получаю эту ошибку:
тип 'Future' не является подтипом типа 'Stream'
Как мне решить эту проблему?