错误:将BLoC_pattern与bool值一起使用时,出现“错误状态:无元素”

时间:2019-07-09 17:41:06

标签: flutter dart bloc rxdart stream-builder

我正在使用bloc_pattern程序包,并且有一个用于管理收藏夹IconButton的块,还有一个名为_isFavorite的布尔变量,该变量将传递到流中,以显示该商品是否为收藏夹。实例化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();
  }


}

主要

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    return BlocProvider(
      blocs: [
              Bloc((i)=> FavoritesBloc()) ,
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        home: HomeScreen(),
        theme: ThemeData(
          primaryColor: Colors.cyan[700],
        ),
      ),
    );
  }

}

我称为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: (){

                            }
                        ),
                      );
                    },
                  ),

}

4 个答案:

答案 0 :(得分:1)

在main.dart中验证您的导入

答案 1 :(得分:0)

您忘记告知StreamBuilder类型,在这种情况下为StreamBuilder<bool>()

我认为是问题所在。

答案 2 :(得分:0)

在您放入var _favoritecontroller放置的块的类中,看看它是否有效

答案 3 :(得分:0)

尝试访问一个空的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;
    },
  );
}

发生错误错误状态:无元素,因为我试图在first内获取空的可迭代keys的{​​{1}}项。

BlocProvider