Error: "Bad state: No element" when using BLoC_pattern with a bool value
Error: "Bad state: No element" when using BLoC_pattern with a bool value
我正在使用 bloc_pattern 包,我有一个 bloc 可以管理最喜欢的 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:
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: (){
}
),
);
},
),
}
你忘了告知 StreamBuilder 类型,在本例中是 StreamBuilder<bool>()
我认为这是问题所在。
在 main.dart
中验证您的导入
在你放置的 bloc 的 class 中 var _favoritecontroller puts as final 看看它是否有效
我在尝试访问空可迭代对象的第一个元素时遇到了同样的问题。
@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;
},
);
}
错误 错误状态:没有元素 正在发生,因为我试图在 keys
中获取空可迭代 keys
的 first
=14=].
var list = myIterable.keys.first; // keys was empty
我正在使用 bloc_pattern 包,我有一个 bloc 可以管理最喜欢的 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:
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: (){
}
),
);
},
),
}
你忘了告知 StreamBuilder 类型,在本例中是 StreamBuilder<bool>()
我认为这是问题所在。
在 main.dart
中验证您的导入在你放置的 bloc 的 class 中 var _favoritecontroller puts as final 看看它是否有效
我在尝试访问空可迭代对象的第一个元素时遇到了同样的问题。
@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;
},
);
}
错误 错误状态:没有元素 正在发生,因为我试图在 keys
中获取空可迭代 keys
的 first
=14=].
var list = myIterable.keys.first; // keys was empty