Как обновить виджет, который извлекает данные документа из Firestore, когда поток обновляется на основе пользовательского ввода? - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь создать прокручиваемые карты, которые обновляли текущее число на основе карты, которую пользователь прокручивает на месте. До сих пор я не знаю, как это сделать, кроме как обернуть карту в детектор жестов и увеличить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...