Конфликт замороженных данных Flutter с данными модели

Я новичок во Flutter и следую различным руководствам, чтобы научиться, и, на самом деле, после попытки сделать что-то простое самостоятельно я обнаружил странную проблему, и я не знаю, как от нее избавиться ...

Это мои зависимости:

dependencies:
  flutter:
    sdk: flutter

  flutter_riverpod: ^0.12.4
  json_annotation: ^3.1.1
  dio: ^3.0.10

dev_dependencies:
  flutter_test:
    sdk: flutter

  freezed: ^0.12.7
  build_runner: ^1.11.1
  json_serializable: ^3.5.1

Я создаю небольшую конечную точку nodejs /status, которая возвращает простой объект: { message: 'success' }

Я создал модель для Status:

part 'status_data.g.dart';

@JsonSerializable()
class StatusData {
  StatusData({
    this.message,
  });

  String message;

  factory StatusData.fromRawJson(String str) =>
      StatusData.fromJson(json.decode(str));

  factory StatusData.fromJson(Map<String, dynamic> json) => StatusData(
        message: json['message'],
      );
}

Я создал Status_notifier:

class StatusNotifier extends StateNotifier<StatusState> {
  final StatusClient _statusClient;

  StatusNotifier(this._statusClient) : super(StatusState());

  Future<void> getStatus() async {
    try {
      state = StatusState.loading();
      final status = await _statusClient.getStatus();
      state = StatusState.loaded(status); // ERROR (see below)
    } catch (e) {
      state = StatusState.error(message: 'Error: $e');
    }
  }
}

ОШИБКА: тип аргумента StatusData (где StatusData определен в /my_long_path/lib/models/status_data.dart) не может быть назначен типу параметра StatusData (где StatusData определено в / my_long_path / lib / application / state /status_state.freezed.dart) '.

Я создал Status_state:

По какой-то причине здесь import для моей StatusData модели серый, не используется ... Похоже, он использует StatusData из какого-то сгенерированного файла ...

@freezed
abstract class StatusState with _$StatusState {
  const factory StatusState() = Initial;
  const factory StatusState.loading() = Loading;
  const factory StatusState.loaded(StatusData status) = StatusData;
  const factory StatusState.error({String message}) = Error;
}

Я создал Status_client для получения данных:

class StatusClient {
  Future<StatusData> getStatus() async {
    Response response =
        await dio.get('https://my-api.com/status');
    if (response.statusCode == 200) {
      StatusData status = StatusData.fromJson(response.data);
      return status;
    }
    throw response;
  }
}

И, наконец, Status_provider:

final statusClientProvider = Provider<StatusClient>((ref) => StatusClient());

final statusNotifierProvider = StateNotifierProvider(
  (ref) => StatusNotifier(ref.watch(statusClientProvider)),
);

Я также выполнил команду flutter pub run build_runner serve --delete-conflicting-outputs для создания файлов.

Также в моем пользовательском интерфейсе с Consumer, когда состояние loaded, у меня есть ошибка:

loaded: (status) => HomePageLoaded(status: status),

Ошибка идентична описанной выше ...

Может ли кто-нибудь объяснить, что не так с моей реализацией, чтобы я мог поправиться? Заранее спасибо!


person Ayeye Brazo    schedule 22.03.2021    source источник


Ответы (1)


изменить имя перенаправленного Construcor

 const factory StatusState.loaded(StatusData status) = StatusData;

to

const factory StatusState.loaded(StatusData status) = StatusLoaded; // or make it private _StatusData

и повторно запустить сборщик

person moulte    schedule 22.03.2021