#flutter #dart #bloc #equatable
#flutter #dart #блок #равный
Вопрос:
Я новичок в equatable и понял, что все параметры в моей модели должны быть final, но я не знаю, как с этим справиться… Что, если мне нужно изменить один из этих параметров? У меня есть представление, в котором вы можете добавлять новые рестораны в список, и этот список будет сохранен в Firestore. Я использую блок flutter, поэтому я добавляю CreateRestaurantFirebaseEvent , и это то, что происходит в моем mapEventToState:
if (event is CreateRestaurantFirebaseEvent)
await _databaseService.createRestaurant(event.restaurant, event.user);
List<Restaurant> restaurantsList = await _databaseService
.loadRestaurantsList(event.user.restaurantsIDsList);
yield LoadedRestaurantsListState(restaurantsList);
}
и в моем database_service:
Future createRestaurant(Restaurant restaurant, User user) async {
restaurant.adminId = user.id;
DocumentReference restaurantDoc =
await restaurantCollection.add(restaurant.toMap());
user.restaurantsIDsList.add(restaurantDoc.id);
updateUser(user);
restaurant.id = restaurantDoc.id;
return restaurant;
}
Итак, я должен обновить свой ресторан некоторыми реквизитами, но если у меня есть только final props, я не могу этого сделать. Какова наилучшая практика? Мне нужен equatable, иначе мой блок не будет работать корректно.
Заранее спасибо
Комментарии:
1. Вместо изменения переменных исходного «event.restaurant», которые вы передаете, вы можете клонировать новый 1, например. В функции createRestaurant: вернуть ресторан (restaurantDoc.id , ресторан. yourvalues и т. Д.). В основном что-то вроде этого en.wikipedia.org/wiki/Object_copying
2. да, но у меня много реквизитов, поэтому самым простым способом было бы создать метод, который копирует каждый отдельный реквизит, кроме того, который я хочу изменить, правильно?
3. Да, это, вероятно, было бы лучше