Я использую конструктор Stream для заполнения содержимого тела различных вкладок на экране с помощью Flutter. Конструктор потоков извлекает данные из Firebase и передает эти значения в разные списки, которые используются в построителе listView для отображения содержимого.
Вкладки на экране должны изменяться в зависимости от выбора на предыдущем экране. Эта часть работает хорошо. Тем не мение,
Проблема 1:
При начальной загрузке экрана содержимое всех вкладок отображается под вкладкой, которая была выбрана изначально. Только когда я смахиваю вправо один раз, то есть перехожу на другую вкладку, я получаю желаемое содержимое на экране, то есть соответствующее содержимое на соответствующих вкладках.
Проблема 2:
Если я вернусь с этого экрана на предыдущий и сделаю другой выбор, снова ... На первой вкладке, которая открывается на этом экране, я получаю содержимое предыдущей вкладки, которая была загружена до нажатия кнопки возврата. Только когда выбрана другая вкладка, я получаю желаемый результат.
Это означает, что написанный код работает, но только при определенных условиях. Вкладки загружаются точно так, как ожидалось, даже с первой попытки, только содержимое под вкладкой является проблемой ... и это тоже только на первом экране загрузки. Это явно означает, что что-то не так с построителем потока, но я не могу понять, что именно.
Любая помощь по этому поводу будет принята с благодарностью.
Макет моего кода с использованием построителя потоков:
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, но я понятия не имею, как реализовать это с помощью построителя потока, и я не уверен, что это сработает.
Пожалуйста, поделитесь всеми имеющимися у вас знаниями, которые могут помочь в решении этой проблемы. Ваше здоровье!