Я пытаюсь создать прокручиваемые карты, которые обновляли текущее число на основе карты, которую пользователь прокручивает на месте. До сих пор я не знаю, как это сделать, кроме как обернуть карту в детектор жестов и увеличить buildingNumber
Но я хотел бы знать, как обновить информационный виджет, который я создал под ним, для отображения информации, соответствующей buildingNumber. BuildingNumber - это имя документа в Firebase, которое содержит информацию, которую необходимо обновить в информационном виджете.
, поэтому, если пользователь прокручивает, buildingNumber переходит от 1 к 2, тогда виджет под прокручиваемыми картами должен отображать данные Firestore, соответствующие документу (buildingNumber), но пока я могу отображать номер при сборке приложения, я не могу обновить его, хотя оно, кажется, работает за кулисами.
Вот код для виджета карты и информации:
Widget _buildingInfoCardState(BuildContext context) {
return MultiProvider(
providers: [ChangeNotifierProvider(create: (_) => BuildingNumber())],
child: Consumer<BuildingNumber>(
builder: (context, buildingNumber, _) {
return StreamBuilder(
stream: Firestore.instance
.collection('managit_buildings')
.document(user.uid)
.collection('buildings')
.document(BuildingNumber.buildingNr.toString())
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Loading();
}
var userBuildingInfo = snapshot.data;
return ListView.builder(
scrollDirection: Axis.vertical,
itemCount: 1,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 500,
padding: EdgeInsets.only(top: 30, left: 30, right: 30),
decoration: BoxDecoration(
color: codGrey,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(50),
topRight: Radius.circular(50),
),
),
child: Column(
children: <Widget>[
// BUILDING INFO_NAME
Text(
userBuildingInfo['buildingName'],
style: TextStyle(
color: Colors.white70,
fontSize: 18,
),
),
...
Детектор жестов, который обновляет buildingNumber:
Widget buildingCard(BuildContext context, DocumentSnapshot building, index) {
final buildingImage = AssetImage('assets/images/building1.png');
return Padding(
padding: const EdgeInsets.only(top: 40, bottom: 40, left: 20, right: 20),
child: GestureDetector(
onTapCancel: () {
BuildingNumber().increment();
print(BuildingNumber.buildingNr);
},
Класс BuildingNumber:
class BuildingNumber with ChangeNotifier {
static int buildingNr = 1;
void increment() {
buildingNr++;
notifyListeners();
}
}
Поскольку это мое первое приложение, я знаю, что то, что я сейчас делаю, вероятно, не лучший способ go о вещах, так что, пока я учусь, я открыт для рекомендаций!
Проблема: я могу отображать информацию для здания 1, но когда я увеличиваю buildingNumber, он не обновляется и не отображает информацию в информации о здании для здания № 2.