Я должен использовать final, но что, если мне нужно что-то изменить вместо этого?

#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. Да, это, вероятно, было бы лучше