错误:使用带有布尔值的 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
中获取空的可迭代 keys
的 first
项。
var list = myIterable.keys.first; // keys was empty
【讨论】:
【参考方案3】:您忘记告知 StreamBuilder 类型,在本例中为 StreamBuilder<bool>()
我认为这就是问题所在。
【讨论】:
当我实例化 Bloc 类时发生错误:“final favoritesBloc = BlocProvider.getBloc在你把 var _favoritecontroller puts 作为最终的 bloc 的类中,看看它是否有效
【讨论】:
我已经解决了这个问题,我接受了 Jacob Moura 的回答。还是谢谢。 @djalmafreestyler 即使您自己可能已经解决了问题,其他用户仍然可以提供其他解决方案,帮助未来遇到相同问题的用户解决他们的问题。谁知道呢,这些未来的解决方案可能会比您在 5 年后已经接受的解决方案更有效!以上是关于错误:使用带有布尔值的 BLoC_pattern 时出现“错误状态:无元素”的主要内容,如果未能解决你的问题,请参考以下文章