Я использую Provider with для предоставления некоторых параметров виджетам в глубине дерева.Виджеты построены из Streambuilder, то есть документов Firebase
Однако поставщик, похоже, не выставляет правильное значение
Очень упрощенная версия моего кода:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
class Parameters {
Parameters(this.documentId);
final String documentId;
}
class Widget1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: mystream, //Query the Firebase for a bunch of Documents
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('Error processing data feed');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
{
return CircularProgressIndicator();
}
break;
default:
{
var _messages = snapshot.data.documents;
return ListView.builder(
itemCount: _messages.length,
itemBuilder: (context, index) {
return Provider<Parameters>(
builder: (context) =>
Parameters(_messages[index].documentID),
child: AnotherWidget());
});
}
}
});
}
}
class AnotherWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
Parameters param = Provider.of<Parameters>(context);
return Text(param.documentId);
}
}
Это прекрасно работает, когда виджеты создаются впервые.Однако при вставке нового документа AnotherWidget показывает идентификатор документа предыдущего документа
Как получить правильный идентификатор документа при обновлении потока?
Примечание. Мне известноЯ могу просто передать документ в качестве параметра.Однако мне нужен параметр в глубине дерева виджетов AnotherWidget