Я использую пакет bloc_pattern , и у меня есть блок, который будет управлять любимым IconButton, у меня есть переменная bool с именем _isFavorite, которая будет передаваться в поток, показывающий, является ли элемент избранным или нет. Когда я создаю экземпляр FavoriteBloc, я получаю сообщение об ошибке: «Плохое состояние: нет элемента». Я посеял значение «ложь», но оно не работает. Я последовал примеру пакета, кто-нибудь знает, как это исправить?
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: (){
}
),
);
},
),
}