【问题标题】:cubit returns a null valuecubit 返回一个空值
【发布时间】:2021-12-05 07:48:34
【问题描述】:

我面临着非常奇怪的问题。我正在使用冷冻、可注射和 dartz 的 bloc。我只需要从 SQl 数据库中获取数据并在今日页面打开时显示它。

UI的代码是:

class TodayPage extends HookWidget {
  const TodayPage();
  @override
  Widget build(BuildContext context) {
    return BlocProvider<ScheduledNotesCubit>(
      lazy:false,
      create: (context) => getIt<ScheduledNotesCubit>()
        ..countDoneNoteOutOfAllNotes()
        ..retrieveData(),
      child: BlocBuilder<ScheduledNotesCubit, ScheduledNotesState>(
        builder: (context, state) {
          return ListView.builder(
            itemCount: state.maybeMap(
                orElse: () {}, getNotesCount: (g) => g.noteCount),
            itemBuilder: (BuildContext context, int index) {
            return  Text(
                "${state.maybeMap(orElse: () {}, getNotes: (notes) {
                      return notes.getNotes[index]['content'];
                    })}",
              );
            },
          );
        },
      ),
    );
  }
}

状态码为:

@freezed
class ScheduledNotesState with _$ScheduledNotesState {
  const factory ScheduledNotesState.initial() = _Initial;
  const factory ScheduledNotesState.getNotes({required List<Map<String, dynamic>> getNotes}) = _GetNotes;
  const factory ScheduledNotesState.getNotesCount({required int noteCount}) = _GetNotesCount;
  const factory ScheduledNotesState.getCountDoneNoteOutOfAllNotes({required String getCountDoneNoteOutOfAllNotes}) = _GetCountDoneNoteOutOfAllNotes;
  const factory ScheduledNotesState.updateIsDoneNote({required int updateIsDoneNote}) = _UpdateIsDoneNote;
}

腕尺码为:

@injectable
class ScheduledNotesCubit extends Cubit<ScheduledNotesState> {
  ScheduledNotesCubit(this._noteRepository)
      : super(const ScheduledNotesState.initial());
  final NoteRepository _noteRepository;

  // retrieve data
  void retrieveData() async {
   return emit(ScheduledNotesState.getNotes(
        getNotes: await _noteRepository.retrieveData()));
  }
}

这个 Cubit 在 listView 中不返回值,而是返回 null 值,但是当我尝试这样做时它可以工作!!!!!!

更新后的腕尺码为:

@injectable
class ScheduledNotesCubit extends Cubit<ScheduledNotesState> {
  ScheduledNotesCubit(this._noteRepository)
      : super(const ScheduledNotesState.initial());
  final NoteRepository _noteRepository;

  // retrieve data
  void retrieveData() async {
    var d= await _noteRepository.retrieveData(); //-->updated
   var x= d[1]['content']; //-->updated
    print("\n $x \n") ; // -->updated
   return emit(ScheduledNotesState.getNotes(
        getNotes: await _noteRepository.retrieveData()));
  }
}

【问题讨论】:

    标签: flutter bloc flutter-bloc


    【解决方案1】:

    您能否尝试将lazy 添加到 false 为 BlocProvider,并更新此代码:

      void retrieveData() {
        _noteRepository.retrieveData().then((value) {
          emit(ScheduledNotesState.getNotes(getNotes: value));
        });
      }
    

    【讨论】:

    • 感谢您的回复,但它不起作用! @dangngocduc
    • 你能用我的更新代码再试一次吗?
    • 也不行! @dangngocduc
    • 我已经回答了我的问题,你可以看到它。谢谢你帮助我
    【解决方案2】:

    解决方案是为cubit创建一个数据类,而不是创建一个密封的类。

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 2015-10-09
      • 2021-12-03
      • 2014-02-11
      • 1970-01-01
      • 2016-07-17
      • 2021-04-14
      • 2017-09-02
      • 2018-04-22
      相关资源
      最近更新 更多