Ошибка: «Плохое состояние: нет элемента» при использовании BLoC_pattern со значением bool - PullRequest
1 голос
/ 09 июля 2019

Я использую пакет 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: (){

                            }
                        ),
                      );
                    },
                  ),

}

Ответы [ 3 ]

1 голос
/ 09 июля 2019

Проверьте ваш импорт в main.dart

0 голосов
/ 10 июля 2019

в классе блока, который вы помещаете var _favoritecontroller, ставит как final, чтобы увидеть, работает ли он

0 голосов
/ 09 июля 2019

вы забыли сообщить тип StreamBuilder, в данном случае это StreamBuilder<bool>()

Я думаю, что это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...