#View
return ListView.builder(
itemCount: eventIDs.length,
itemBuilder: (BuildContext context, int i) {
return StoreConnector<AppState, EventsPageViewModel>(
rebuildOnChange: true,
onDidChange: (EventsPageViewModel events) {print('${events}');},
onInit: (store) =>
store.dispatch(FetchEventAction(id: eventIDs[i])),
converter: (store) => EventsPageViewModel.fromStore(store),
builder: (BuildContext context, EventsPageViewModel events) {
print("build ListItem $i ${eventIDs[i]}");
if (events.events.containsKey('${eventIDs[i]}')) {
return EventCard(
event: events.events[eventIDs[i]],
);
}
return Container(
child: Card(
child: Container(
height: 120.0,
),
),
);
});
},
);
#State
@immutable
class Events {
Events({
this.loadingStatus,
this.events,
});
factory Events.initial() {
return Events(
loadingStatus: Map<String, LoadingStatus>(),
events: Map<String, EventModel>(),
);
}
final Map<String, LoadingStatus> loadingStatus;
final Map<String, EventModel> events;
Events copyWith({
Map<String, LoadingStatus> loadingStatus,
Map<String, EventModel> events,
}) {
return Events(
loadingStatus: loadingStatus ?? this.loadingStatus,
events: events ?? this.events,
);
}
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Events &&
runtimeType == other.runtimeType &&
loadingStatus == other.loadingStatus &&
const MapEquality().equals(events, other.events);
@override
int get hashCode => loadingStatus.hashCode ^ const MapEquality().hash(events);
}
#ViewModel
class EventsPageViewModel {
EventsPageViewModel({
@required this.status,
@required this.events,
});
final Map<String, LoadingStatus> status;
final Map<String, EventModel> events;
static EventsPageViewModel fromStore(
Store<AppState> store,
) {
return EventsPageViewModel(
status: store.state.events.loadingStatus,
events: store.state.events.events,
);
}
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is EventsPageViewModel &&
runtimeType == other.runtimeType &&
status == other.status &&
const MapEquality().equals(events, other.events);
@override
int get hashCode => status.hashCode ^ const MapEquality().hash(events);
}
Я пытаюсь восстановить представление после того, как оно запускает асинхронное действие и возвращает значение на карту.Я не знаю, правильно ли я проверяю равенство
Я проверил, запускает ли промежуточное ПО запрос GET.Это.Я проверил, возвращает ли запрос GET информацию.Это.У меня есть другое асинхронное действие, которое стреляет.Тот возвращает список строк и вызывает перестройку на его StoreConnector.
Кто-нибудь знает, почему StoreConnector не обнаруживает различия?