Цель setState
- сообщить фреймворку, что переменная в состоянии изменилась и виджет необходимо перестроить, чтобы отразить это изменение. Таким образом, вызов setState
снова вызывает функцию build
, которая в вашем случае напоминает ваш Future
, который снова вызывает setState
, что запускает build
и т. Д.
Чтобы исправить это, вы должны вызовите Future
в initState
и используйте FutureBuilder
для отображения данных, когда они будут готовы.
Пример:
class _SampleState extends State<Sample> {
Firestore db = Firestore.instance;
Future databaseFuture;
@override
void initState() {
databaseFuture = db.collection('share').document('0').get()
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: databaseFuture,
builder: (context, snapshot) {
if(!snapshot.hasData) {
return CircularProgressIndicator();
}
var message = snapshot.data.data['message'];
print(message);
var appLink = snapshot.data.data['appLink'];
return Text('$message $appLink');
}
),
}
}