Я разрабатываю приложение и столкнулся с проблемой, которая не вызывает ошибки, но меня очень расстраивает.
Ситуация такова, что у меня есть набор RxSet объектов CustomClass с инициализацией по умолчанию пустым набором. Когда я извлекаю данные с сервера, я хочу присвоить результат этому набору. Как предлагает GetX, я должен использовать myRxSet = dataFetchedFromServer
. Это дает мне ошибку времени компиляции. myRxSet.value = dataFetchedFromServer
все еще работает, но дает информацию, которую я не должен назначать свойству .value.
Пример кода можно увидеть ниже
RxSet<MyCustomClass> myCustomClassEntries = Set<MyCustomClass>().obs;
Future<void> syncData() async {
myCustomClassEntries = await _fetchDataFromServer(); // this gives me compile time error
myCustomClassEntries.value = await _ fetchDataFromServer(); // this gives me a warning that RxSet is not intented to be used this way.
}
Версия GetX: ^4.3.4 Версия флаттера: 2.2.3 Версия дротика: 2.13.4
Есть идеи, что я делаю не так?
Изменить
_fetchDataFromServer()
не имеет значения в этой ситуации, просто хотел дать некоторый контекст проблеме. Все просто:
RxSet<MyCustomClass> myCustomClassEntries = Set<MyCustomClass>().obs;
// This line gives me a compile time error. It says Set<MyCustomClass> can't be assigned to RxSet<MyCustomClass>
myCustomClassEntries = new Set<MyCustomClass>();
// This line works, just like everywhere else with GetX, but says .value is no longer intented to be used on RxList, RxSet or RxMap. It recommends to use the syntax above, which gives the error.
myCustomClassEntries.value = new Set<MyCustomClass();
Из журнала изменений GetX
Изменение: Вам не нужно обращаться к свойству ".value" примитивов. Для строк вам нужна интерполяция. Для num, int, double у вас будут обычные операторы, и вы будете использовать их как типы дротика. Таким образом, .value можно использовать исключительно в классах моделей. Пример:
var name = "Jonny" .obs;
// usage:
Text ("$name");
var count = 0.obs;
// usage:
increment() => count ++;
Text("$count");
Таким образом: List, Map, Set, num, int, double и String в этом выпуске больше не будут использовать свойство .value.
ПРИМЕЧАНИЕ: изменения не были критическими, однако вы могли пропустить детали документации, поэтому, если вы столкнулись с сообщением: «Значение элемента может использоваться только в элементах экземпляра подклассов 'rx_list. dart'" вам просто нужно удалить свойство ".value" из вашего списка, и все будет работать как задумано. То же самое касается карт и наборов.
Какую ошибку вы получаете? Вы также должны поделиться функцией
_fetchDataFromServer
.Я дополнил описание необходимой информацией.