错误:使用带有布尔值的 BLoC_pattern 时出现“错误状态:无元素”

Posted

技术标签:

【中文标题】错误:使用带有布尔值的 BLoC_pattern 时出现“错误状态:无元素”【英文标题】:Error: "Bad state: No element" when using BLoC_pattern with a bool value 【发布时间】:2019-11-19 07:57:49 【问题描述】:

我正在使用bloc_pattern 包,并且我有一个可以管理收藏的 IconButton 的块,我有一个名为 _isFavorite 的 bool 变量,它将传递给流,以显示该项目是否收藏。当我实例化 FavoriteBloc 时,我收到错误:“Bad state: No element”。我播种了一个值“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: ()

                            
                        ),
                      );
                    ,
                  ),


【问题讨论】:

【参考方案1】:

在 main.dart 中验证您的导入

【讨论】:

谢谢。我的导入 'package:?/blocs//favorites_bloc.dart';是两个 // 在 favorite_loc 之前,看起来 android Studio 不会警告子文件夹中的导入错误。【参考方案2】:

我在尝试访问空的可迭代对象的第一个元素时遇到了同样的问题。

@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;
    ,
  );

错误 Bad state: No element 正在发生,因为我试图在 BlocProvider 中获取空的可迭代 keysfirst 项。

var list = myIterable.keys.first; // keys was empty

【讨论】:

【参考方案3】:

您忘记告知 StreamBuilder 类型,在本例中为 StreamBuilder&lt;bool&gt;()

我认为这就是问题所在。

【讨论】:

当我实例化 Bloc 类时发生错误:“final favoritesBloc = BlocProvider.getBloc ();”。其实我已经注释了 StreamBuilder 来测试。【参考方案4】:

在你把 var _favoritecontroller puts 作为最终的 bloc 的类中,看看它是否有效

【讨论】:

我已经解决了这个问题,我接受了 Jacob Moura 的回答。还是谢谢。 @djalmafreestyler 即使您自己可能已经解决了问题,其他用户仍然可以提供其他解决方案,帮助未来遇到相同问题的用户解决他们的问题。谁知道呢,这些未来的解决方案可能会比您在 5 年后已经接受的解决方案更有效!

以上是关于错误:使用带有布尔值的 BLoC_pattern 时出现“错误状态:无元素”的主要内容,如果未能解决你的问题,请参考以下文章

显示带有来自 Core Data 的布尔值的 .sheet

Python Bool和int比较以及带有布尔值的列表索引

带布尔值的 useState

致命错误:调用 C:\xampp\htdocs\index.php 中布尔值的成员函数 bind_param()

Angular:具有布尔值的方法与不工作的组件共享

javascript Boolean