我正在创造一个手肘.但是,在运行build_runner命令后,不会生成copyWith()方法. 我的search_cubit.dart文件:

import 'package:book_ai/domain/book/book.dart';
import 'package:book_ai/domain/book/i_book_repository.dart';
import 'package:book_ai/domain/search/search_failure.dart';
import 'package:book_ai/domain/search/value_objects.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.dart';

part 'search_cubit.freezed.dart';
part 'search_state.dart';

@injectable
class SearchCubit extends Cubit<SearchState> {
  final IBookRepository _bookRepository;

  SearchCubit(this._bookRepository) : super(SearchState.initial());

  void updateSearchQuery(String typedQuery) {
    emit(state.copyWith(
      searchQuery: SearchQuery(typedQuery),
      searchFailureOrSuccessOption: none(),
    ));
  }

  Future<void> search() async {
    emit(state.copyWith(isSubmitting: true));

    final possibleFailure =
        await _bookRepository.get(state.searchQuery.getOrCrash());

    emit(possibleFailure.fold(
      (failure) {
        failure.maybeWhen(
            unexpected: () => emit(
                  state.copyWith(
                    isSubmitting: false,
                    searchFailureOrSuccessOption: some(
                      left(
                        const SearchFailure.otherFailure('unknown'),
                      ),
                    ),
                  ),
                ),
            orElse: () => const SearchFailure.serverError());
      },
      (books) => SearchState.searchSuccess(books),
    ));

    // emit(state.copyWith(
    //   isSubmitting: false,
    //   searchFailureOrSuccessOption: optionOf(result),
    // ));
  }
}

我的search_state.dart个文件:

part of 'search_cubit.dart';

@freezed
class SearchState with _$SearchState {
  const factory SearchState({
    required SearchQuery searchQuery,
    required bool isSubmitting,
    required Option<Either<SearchFailure, Unit>> searchFailureOrSuccessOption,
  }) = _SearchState;

  const SearchState._();

  const factory SearchState.initial() = _Initial;
  const factory SearchState.loading() = _Loading;
  const factory SearchState.searchFailure(SearchFailure failure) =
      _SearchFailure;
  const factory SearchState.searchSuccess(List<Book> books) = _SearchSuccess;
}

我try 修改search_state.dart文件以明确定义SearchState.initial(),如下所示:

factory SearchState.initial() => SearchState(
      searchQuery: SearchQuery(''),
      isSubmitting: false,
      searchFailureOrSuccessOption: none());

同时删除其他状态.在这种情况下,copyWith方法起作用.然而,我也希望能够使用其他州.

推荐答案

如果您希望拥有多个状态,然后能够使用CopyWith(),则应该显式强制转换为在构造函数中具有参数的状态.

@freezed
class SearchState with _$SearchState {
  const SearchState._();

  const factory SearchState.initial() = _Initial;

  const factory SearchState.loading() = _Loading;

  const factory SearchState.searching({
    required SearchQuery searchQuery,
    required Option<Either<SearchFailure, Unit>> searchFailureOrSuccessOption,
    @Default(false) bool isSubmitting,
  }) = Searching;

  const factory SearchState.searchFailure(SearchFailure failure) = SearchFailure;

  const factory SearchState.searchSuccess(List<Book> books) = SearchSuccess;
}

然后

  void updateSearchQuery(String typedQuery) {
    if (state is Searching) {
      emit(
        (state as Searching).copyWith(
          searchQuery: SearchQuery(typedQuery),
          searchFailureOrSuccessOption: none(),
        ),
      );
  }

Flutter相关问答推荐

flutter:如何将字体大小设置得更大(更大)

Android元数据为1.9.0,预期版本为1.7.1,如何解决flutter应用程序构建失败问题?

如何在凌晨12点显示00:00(24小时格式)而不是在Flutter 中显示24:00

在创建肘部并使用冻结时,无法使用中的Copy With方法

material 3芯片,不能go 除输入芯片小部件上的轮廓

Ffltter:发布版本中的Path NotFoundException

无法将新文物与Flutter 项目集成在一起

不要跨同步间隔使用BuildContext

ScaffoldMessenger 在等待键下方不起作用

Select 文本时如何更改 Flutter 中的光标 colored颜色 ?

要禁用按钮上的通知声音,请点击Flutter

用户文档 ID 与 Firestore 中的用户 ID 相同

如何在Flutter中动态绘制一条从A点到B点的线?

小部件堆栈未显示顶层

Flutter RIverpod 奇怪地改变状态

如何更改中心的圆形进度指示器

如何在Flutter中制作带有波浪边框的圆圈来显示图像?

如何在屏幕按钮中排列 row() (我想在按钮中放置屏幕导航图标)

解密 Modulr 安全令牌

FLUTTER+SQL:在 ListViewBuilder 中显示数据库中的数据