Что может привести к перестройке Flutter Redux StoreConnector - PullRequest
0 голосов
/ 19 октября 2018
#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 не обнаруживает различия?

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