Проблема с initstate базы данных flutter firebase

В моем приложении есть объект Company с атрибутом shopList. Список покупателей получит данные из базы данных firebase в void initState ().

Company(name: 'Storm',
      about: 'xxxxxxxxxxxx',
      backdropPhoto: 'assets/hk.jpg',
      shopList: [],
      location: 'HK',
      logo: 'assets/logo.png',
      president: 'Grand Production House');

Предполагается, что у продавца будет 5 разных магазинов, но я не знаю, почему у него будет 5 магазинов с одинаковыми данными.

Код:

class CompanyDetailsPage extends StatefulWidget {

    CompanyDetailsPage(
      {@required AnimationController controller, this.context})
      : animation = new CompanyDetsIntroAnimation(controller);

  final BuildContext context;

  final CompanyDetsIntroAnimation animation;
  @override
  _CompanyDetailsPageState createState() => _CompanyDetailsPageState();
}

class _CompanyDetailsPageState extends State<CompanyDetailsPage> {

  Shop shopItems;

  Company storm = Company(
      name: 'Storm',
      about: 'xxxxxxxxxxxx',
      backdropPhoto: 'assets/hk.jpg',
      shopList: [],
      location: 'HK',
      logo: 'assets/logo.png',
      president: 'Grand Production House');

  DatabaseReference databaseReference = FirebaseDatabase.instance.reference();

  @override
  void initState() {
    super.initState();

    shopItems = Shop();

    databaseReference.child('HK').once().then((DataSnapshot snapshot) {
      Map uid = snapshot.value;
      uid.forEach((k,v) {
        Map shopMap = v['Shop'];

        shopMap.forEach((sk,sv) {
          shopItems.key = sk;
          shopItems.shopName = sv["ShopName"];
          shopItems.address = sv["ShopAddress"];
          shopItems.tel = sv["ShopTel"];
          shopItems.thumbnail = sv["Thumbnail"];


          debugPrint(shopItems.address);

          storm.shopList.add(shopItems);

          debugPrint(shopItems.key);
        });

      });

      for (int i = 0; i < storm.shopList.length; i++) {

        debugPrint("Username: ${storm.shopList[i].address }, User Id: ${storm.shopList[i].key}");

      }
    });
  }

enter image description here

Результат с консоли:

  • Синхронизация файлов с устройством iPhone X ...
  • флаттер: -LM3JFMq5y9fNVA431QW
  • флаттер: -LMHR9YQFqgKlnFArwEN
  • флаттер: -LM3JH8KMha3aeN-YEq5
  • флаттер: -LM3JJTFda0c3qKaKEaL
  • флаттер: -LMIaUIBOhj1k6pjj9eY
  • flutter: ShopAddress: bbbbbb, ShopKey: -LMIaUIBOhj1k6pjj9eY
  • flutter: ShopAddress: bbbbbb, ShopKey: -LMIaUIBOhj1k6pjj9eY
  • flutter: ShopAddress: bbbbbb, ShopKey: -LMIaUIBOhj1k6pjj9eY
  • flutter: ShopAddress: bbbbbb, ShopKey: -LMIaUIBOhj1k6pjj9eY
  • flutter: ShopAddress: bbbbbb, ShopKey: -LMIaUIBOhj1k6pjj9eY

Вам следует попробовать называть переменные более описательными словами. За этим трудно уследить. Если вы отлаживаете метод, можете ли вы увидеть пять разных магазинов, возвращаемых firebase?

Sebastian 13.09.2018 22:53

debugPrint (shopItems.address) распечатывает 5 разных адресов, затем я помещаю этот shopItem в массив shopList объекта Company. Но я распечатываю элемент массива shopList, он показывает, что все предметы одинаковые. Я не мог понять, в чем проблема.

GPH 14.09.2018 07:01
0
2
874
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что проблема может быть в том, где вы создаете экземпляр shopItems = Shop();.

Попробуйте удалить его оттуда и сделайте это

shopMap.forEach((sk,sv) {
//Create the instance here
  shopItems = Shop();

  shopItems.key = sk;
  shopItems.shopName = sv["ShopName"];
  shopItems.address = sv["ShopAddress"];
  shopItems.tel = sv["ShopTel"];
  shopItems.thumbnail = sv["Thumbnail"];


  debugPrint(shopItems.address);

  storm.shopList.add(shopItems);

  debugPrint(shopItems.key);
});

Большое спасибо! Могу я спросить, почему shopItem не изменил значение?

GPH 14.09.2018 17:31

Другие вопросы по теме