В моем приложении есть объект 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}");
}
});
}
Результат с консоли:
debugPrint (shopItems.address) распечатывает 5 разных адресов, затем я помещаю этот shopItem в массив shopList объекта Company. Но я распечатываю элемент массива shopList, он показывает, что все предметы одинаковые. Я не мог понять, в чем проблема.

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