Flutter 错误:";错误状态:无元素“;使用带有布尔值的BLoC_模式时

Flutter 错误:";错误状态:无元素“;使用带有布尔值的BLoC_模式时,flutter,dart,bloc,rxdart,stream-builder,Flutter,Dart,Bloc,Rxdart,Stream Builder,我使用的是package,我有一个bloc来管理一个收藏夹图标按钮,我有一个名为_isFavorite的bool变量,它将传递到流,显示该项是否为收藏夹。当我实例化FavoriteBloc时,我得到一个错误:“坏状态:没有元素”。我使用了一个值“false”作为种子,但它不起作用。我以软件包为例,有人知道我如何修复它吗 class FavoritesBloc extends BlocBase { FavoritesBloc(); bool _isFavorite; var _f

我使用的是package,我有一个bloc来管理一个收藏夹图标按钮,我有一个名为_isFavorite的bool变量,它将传递到流,显示该项是否为收藏夹。当我实例化FavoriteBloc时,我得到一个错误:“坏状态:没有元素”。我使用了一个值“false”作为种子,但它不起作用。我以软件包为例,有人知道我如何修复它吗

class FavoritesBloc extends BlocBase {

  FavoritesBloc();

  bool _isFavorite;

  var _favoriteController = BehaviorSubject<bool>.seeded(false);

  Stream<bool> get outFavorite => _favoriteController.stream;

  Sink<bool> get inFavorite => _favoriteController.sink;


  @override
  void dispose() {
    _favoriteController.close();
    super.dispose();
  }


}
我称之为FavoriteBloc的类:

class DetailScreen extends StatelessWidget {

  final favoritesBloc = BlocProvider.getBloc<FavoritesBloc>();

  @override
  Widget build(BuildContext context) {

    return WillPopScope(
      onWillPop: (){

        Navigator.of(context).pop();


      },
      child: Material(
        child: OKToast(
          child: SafeArea(
            child: Scaffold(
              body: Stack(
                children: <Widget>[

                  StreamBuilder(
                    stream: favoritesBloc.outFavorite,
                    builder: (context, snapshot){

                      bool isFavorite = snapshot.data;

                      return Align(
                        alignment: Alignment.topRight,
                        heightFactor: 200,
                        child: IconButton(
                            icon: Icon(
                              FontAwesomeIcons.solidHeart,
                              color: isFavorite == true ? Colors.redAccent : Colors.white,
                              size: 35,
                            ),
                            onPressed: (){

                            }
                        ),
                      );
                    },
                  ),

}
class DetailScreen扩展了无状态小部件{
final-favoritesBloc=BlocProvider.getBloc();
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:(){
Navigator.of(context.pop();
},
儿童:材料(
孩子:烤面包片(
儿童:安全区(
孩子:脚手架(
主体:堆栈(
儿童:[
StreamBuilder(
流:favoritesBloc.outFavorite,
生成器:(上下文,快照){
bool isFavorite=snapshot.data;
返回对齐(
对齐:alignment.topRight,
高度系数:200,
孩子:我的钮扣(
图标:图标(
FontAwesomeIcons.solidHeart,
颜色:isFavorite==真?颜色。红色口音:颜色。白色,
尺码:35,
),
已按下:(){
}
),
);
},
),
}

您忘记通知StreamBuilder类型,在本例中为
StreamBuilder()


我想这就是问题所在。

验证main中的导入。dart

在您将var\u favoritecontroller放置为final的bloc类中,以查看它是否有效。

在尝试访问空iterable的第一个元素时,我遇到了相同的问题

@override
Widget build(BuildContext context) {
  return BlocProvider<MyBloc>(
    create: (context) {
      var list = myIterable.keys.first; // keys was empty
      var myBloc = MyBloc();
      return myBloc;
      }
       return schuldenBloc;
    },
  );
}

当我实例化Bloc类时会发生错误:“final-favoritesBloc=BlocProvider.getBloc();”。实际上,我已经对StreamBuilder进行了注释以进行测试。谢谢。我的导入“package:?/blocs//favorites\u bloc.dart”比favorite\u loc早两周,看起来Android Studio没有警告子文件夹中的导入错误。我已经解决了问题,我接受了Jacob Moura的答案。无论如何,谢谢。@DjalmaFreestyle,即使您可能有alr已经自己解决了这个问题,其他用户仍然可以提供其他解决方案,这些解决方案也可以帮助将来有同样问题的用户解决他们的问题。谁知道呢,这些未来的解决方案可能比你已经接受了5年的解决方案更有效!
@override
Widget build(BuildContext context) {
  return BlocProvider<MyBloc>(
    create: (context) {
      var list = myIterable.keys.first; // keys was empty
      var myBloc = MyBloc();
      return myBloc;
      }
       return schuldenBloc;
    },
  );
}
var list = myIterable.keys.first; // keys was empty