繁体   English   中英

使用 bloc cubit 将数据发送到其他页面

[英]Sending data to other page with bloc cubit

我的问题是这个。 我为 2 个不同的页面创建了 cubit。 当我在第一页时,我可以填写第二页内的列表,我可以从日志中读取它。 但是,当我转到第二页时,我从上一页填写的列表仍然是空的。

主要.dart

home:
          
          
           MultiBlocProvider(
            providers: [
              BlocProvider(create: (_) => HomeCubit(PhotoService())),
              
              BlocProvider(create: (_)=> FavoritesCubit())//Gerekiyor,homeviewda içerisindeki methoda erişmem gerekiyor
            ],
            child: const HomeView())

HomeView.dart

where I run the function in favoritescubit and add it to the list
 onTap: () {
                        

                        BlocProvider.of<FavoritesCubit>(context).addFavorite(
                            context,
                            state.selectItem![index],
                            );
                        print(state.selectItem?[index].isSelected);
                        context.read<FavoritesCubit>().getAllFavorites();

                        // print("UI --- ${state.selectItem![index].isSelected}");
                        //  context.read<FavoriteBloc>().add(
                        //      AddFavorite(photoList, photoList.isSelected));
                        //  print(" ispressed ${photoList.isSelected}");
                      },

收藏夹Cubit.dart

class FavoritesCubit extends Cubit<FavoritesState> {
  FavoritesCubit() : super(const FavoritesState());

  final List<PhotoModel> favoriteList = <PhotoModel>[];

  Future<void> getAllFavorites() async {
    print("FavoriteList : ${favoriteList.length}");
    emit(state.copyWith(favoriteList: favoriteList));
  }



 

     Future<void> addFavorite(
        BuildContext context,
        PhotoModel photo,
      ) async {
        photo.isSelected = !photo.isSelected;
        if (favoriteList.contains(photo) == false) {
          favoriteList.add(photo);
          emit(state.copyWith(
              favoriteList: favoriteList, isFavorite: photo.isSelected));
          print("${state.favoriteList!.length}asdasd");
        } else if (favoriteList.contains(photo) == true) {
          favoriteList.remove(photo);
          emit(state.copyWith(
              favoriteList: favoriteList, isFavorite: photo.isSelected));
          print("${state.favoriteList!.length}asdasd");
        }

收藏夹视图.dart

class FavoriteView extends StatefulWidget {
  const FavoriteView({Key? key}) : super(key: key);

  @override
  State<FavoriteView> createState() => _FavoriteViewState();
}

class _FavoriteViewState extends State<FavoriteView> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => FavoritesCubit()..getAllFavorites(),
      child: Scaffold(
        appBar: AppBar(
          title: const Text("Bloc Example"),
        ),
        body: buildFavoriteList(context),
      ),
    );
  }
}




Widget buildFavoriteList(BuildContext context) {
 
  return BlocConsumer<FavoritesCubit, FavoritesState>(
    listener: (context, state) {
      // TODO: implement listener
    },
    builder: (context, state) {
      return ListView.builder(
          itemCount: state.favoriteList?.length,
          itemBuilder: (context, index) {
            return GestureDetector(
              onTap: (() {
                // navigateToPostDetailPage(context, photos[index]);
              }),
              child: Padding(
                padding: const EdgeInsets.all(10),
                child: PhotoListTile(
                  isPressed: state.favoriteList![index].isSelected,
                  imageUrl: state.favoriteList![index].thumbnailUrl.toString(),
                  title: state.favoriteList![index].title.toString(),
                  url: state.favoriteList![index].url.toString(),
                  onTap: () {
                    // context.read<HomeCubit>().addFavorite(
                    //     context,
                    //     state.favoriteList![index],
                    //     state.favoriteList![index].isSelected);
                    // context
                    //     .read<FavoriteBloc>()
                    //     .add(RemoveFavorite(photos[index]));
                  },
                ),
              ),
            );
          });
    },
  );

好的,现在您添加了有关您的FavoriteView视图的信息,很清楚问题出在哪里。

在您的FavoriteView中,您创建一个新的 cubit,这与您在MultiBlocProvider中创建的不同。 这就是为什么它在您的FavoriteView视图上总是空的

create: (context) => FavoritesCubit()..getAllFavorites(), // This is the issue

确保您的FavoriteViewMultiBlocProvider下某处的子项,并删除在该视图中创建的新FavoritesCubit 即删除您的FavoriteView视图中的BlocProvider

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM