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