Я использую Построитель потока, чтобы заполнить содержимое тела разных вкладок на экране с помощью Flutter. Построитель потока извлекает данные из Firebase и передает эти значения в разные списки, которые используются в построителе listView для отображения содержимого.
Предполагается, что вкладки на экране изменяются в зависимости от выбора на предыдущем экран. Эта часть работает хорошо. Однако
Проблема 1:
При первоначальной загрузке экрана содержимое всех вкладок отображается под первоначально выбранной вкладкой. Только когда я проведу вправо один раз, то есть go к какой-либо другой вкладке, я получу на экране нужное содержимое, означающее соответствующее содержимое под соответствующими вкладками.
Проблема 2:
Если Я go вернусь с этого экрана на предыдущий экран и снова сделаю другой выбор ... На первой вкладке, которая открывается на этом экране, я получаю содержимое с предыдущей вкладки, которая была загружена до нажатия кнопки "Назад". Только когда выбрана другая вкладка, я получаю желаемый вывод.
Это означает, что написанный код работает, но только при определенных условиях. Вкладки загружаются точно так, как и ожидалось, даже с первой попытки, только содержимое под вкладкой является проблемой ... это тоже только на первом экране загрузки. Это ясно означает, что с построителем потока что-то не так, но я не могу понять, что именно.
Любая помощь по этому вопросу будет высоко оценена.
Макет моего кода с использованием построителя потоков:
body : StreamBuilder(
stream: Firestore.instance
. //Required Reference//
.snapshots(),
builder: (BuildContext context, AsyncSnapshot <QuerySnapshot>snapshot) {
var someData = snapshot.data.documents;
List<dynamic> someDocs = someData;
if (snapshot.hasData == null){
return CircularProgressIndicator(),}
else if (snapshot.data.documents.length > 0){
RequiredList1 = [];
..... More such statements ..........
RequiredList11 = [];
for(int i =0; i < someDocs.length; i++){
RequiredList1.add(someData[i]['field1']);
....... More such calls ................
RequiredList11.add(someData[i][field11']);
}
return WidgetToShowContents
}
}
);
Единственное, что заслуживает внимания, это то, что ссылка содержит имя вкладки, которая выбрана в данный момент. Тем не менее, поскольку вкладка отображается надлежащим образом, и все остальные вкладки также работают, я уверен, что это не создает проблемы.
Я думал об использовании метода dispose, чтобы избавиться от построителя потоков. для решения проблемы 2, но я не знаю, как реализовать это с помощью потокового компоновщика, и я не уверен, что это сработает.
Пожалуйста, оставьте все ваши знания, которые могут помочь в решении этой проблемы. Ура!