Provider.of<AppBarCubit>(context, listen: false)



我正在尝试创建一个客户应用程序栏,当你滚动时,它会褪色,然后如果你在不重置所有内容的情况下交换到和从,它会保持其状态。但是,在我实现bloc和cubit后,褪色已经停止工作。

当我开始在我的应用程序上滚动时,它会抛出一个异常:

"Tried to listen to a value exposed with provider, from outside the widget tree."

然后建议:

To fix write "Provider.of<AppBarCubit>(context, listen: false);"

它还说明了事件处理程序可能的原因。但当我把它添加到任何地方时,它都不起作用。

我不确定我应该在哪里实现,也不确定如何实现。作为我的初学者,请提前道歉。

这是我的代码:

class _HomeScreenState extends State<HomeScreen> {
ScrollController _scrollController;

@override
void initState() {
_scrollController = ScrollController()
..addListener(() {
context.watch<AppBarCubit>().setOffset(_scrollController.offset);
});
super.initState();
}
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final Size screenSize = MediaQuery.of(context).size;
return Scaffold(
extendBodyBehindAppBar: true,
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.grey[850],
child: const Icon(Icons.cast),
onPressed: () => debugPrint('Cast'),
),
appBar: PreferredSize(
preferredSize: Size(screenSize.width, 50.0),
child: BlocBuilder<AppBarCubit, double>(
builder: (context, scrollOffset) {
return CustomAppBar(scrollOffset: scrollOffset);
},
),
),
body: CustomScrollView(
controller: _scrollController,
slivers: const [
SliverToBoxAdapter(
child: ContentHeader(featuredContent: sintelContent),
),
SliverPadding(
padding: EdgeInsets.only(top: 20.0),
sliver: SliverToBoxAdapter(
child: Previews(
key: PageStorageKey('previews'),
title: 'Previews',
contentList: previews,
),
),
),
SliverToBoxAdapter(
child: ContentList(
key: PageStorageKey('myList'),
title: 'My List',
contentList: myList,
),
),
SliverToBoxAdapter(
child: ContentList(
key: PageStorageKey('originals'),
title: 'Netflix Originals',
contentList: originals,
isOriginals: true,
),
),
SliverPadding(
padding: EdgeInsets.only(bottom: 20.0),
sliver: SliverToBoxAdapter(
child: ContentList(
key: PageStorageKey('trending'),
title: 'Trending',
contentList: trending,
),
),
),
],
),
);
}
}

不要在init函数中使用context.watch,而是使用context.read。在您的构建方法中,您可以使用context.wwatch。这会起作用。

最新更新