我正在try 学习阻塞模式,我第一次遇到这种模式是在下面的git资源库fitness中,我试着使用我自己的代码,但它有很多错误和问题,所以我想我最好先试一试他们的代码,然后我会看到变化,所以我试了一下,但他们的代码也导致了错误.
我解决了其中的一些问题,但与块相关的问题仍然存在,您可以参考我为他们打开的这个问题PageSwipe/Change Issue,其中我解释了错误以及它们在代码中的来源.
我试着跟随位于这里migration guide的迁徙指南,但到目前为止还没有成功.
阻止代码可以在这里找到first page BloC code
如果为了解决这一问题还需要任何其他相关的东西 有问题, comments 一下,我会加进go 的
错误:
Bad state: add(PageSwipedEvent) was called without a registered event handler.
Make sure to register a handler via on<PageSwipedEvent>((event, emit) {...})
代码中导致该错误代码行:
bloc.add(PageChangedEvent());
// or
bloc.add(PageSwipedEvent(index: index));
阻止代码:
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:meta/meta.dart';
part 'onboarding_event.dart';
part 'onboarding_state.dart';
class OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> {
OnboardingBloc() : super(OnboardingInitial());
int pageIndex = 0;
final pageController = PageController(initialPage: 0);
@override
Stream<OnboardingState> mapEventToState(
OnboardingEvent event,
) async* {
if (event is PageChangedEvent) {
if (pageIndex == 2) {
yield NextScreenState();
return;
}
pageIndex += 1;
pageController.animateToPage(
pageIndex,
duration: Duration(milliseconds: 500),
curve: Curves.ease,
);
yield PageChangedState(counter: pageIndex);
} else if (event is PageSwipedEvent) {
pageIndex = event.index;
yield PageChangedState(counter: pageIndex);
}
}
}
我还试着添加了以下内容:
on<PageSwipedEvent>((event, emit) => mapEventToState(event));
但它似乎不起作用(它不再显示问题,但它也没有完成工作.
编辑:
Flutter 翼版本: