Я не уверен, что отношения между британцами и закладками, то есть, что вы ожидаете изменить чаще. Я собираюсь предположить, что закладки не меняются, когда пользователь открывает раздел закладок.
В этом случае вы можете получить значение длины закладок в initState. Вы переопределите метод initState () класса состояний, а затем вызовете асинхронный метод, который извлекает значение из базы данных. (Состояние инициализации не может быть асинхронным). Как только значение получено, вы можете вызвать setState (), чтобы обновить виджет со значением закладок, установленным как int.
Может выглядеть примерно так:
class UserBookmarksSection extends StatefulWidget {
@override
_UserBookmarksSectionState createState() => _UserBookmarksSectionState();
}
class _UserBookmarksSectionState extends State<UserBookmarksSection> {
int bookmarksLength;
@override
void initState(){
super.initState();
getBookmarksLength();
}
Future<void> getBookmarksLength() async {
bookmarksLength = await getArrayLength(id);
setState((){});
}
@override
Widget build(BuildContext context) {
if(bookmarksLength == null) return CircularProgressIndicator();
else return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
HeadlineItem(title: "Your bookmarks"),
StreamBuilder(
stream: Firestore.instance.collection("brites").snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return const Text("Loading...");
return Column(
children: populateBriteList(snapshot, bookmarksLength, true),
);
}
),
],
);
}
}
Firestore firestore = Firestore.instance;
Future<int> getArrayLength(String documentId) async {
DocumentSnapshot snapshot = await firestore.collection('collection').document(documentId).get();
return snapshot.data['array'].length;
}
Более надежным решением может быть наличие отдельного класса, который обрабатывает как прослушивание потока и получение длины массива, так и комбинированиевся информация, которую вы собираетесь отображать в каком-то абстрактном типе данных, который вы помещаете в отдельный указанный вами поток, специально предназначенный для прослушивания пользовательского интерфейса.