如何解决颤振如何正确使用Consumer和ChangeNotifierProvider?找不到丢失的东西
这是从源代码逐步复制的代码(Fidev设计挑战),但出现了错误 怀疑类是MainPage和LeopardPage 已经导入了所有必要的软件包 无法找出缺少的东西
class LeopardPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
//print(MediaQuery.of(context).size.width);
return Consumer<PageOffsetNotifier>(
builder:(context,value,child)
{
return Positioned(
top: 100,left: -0.85 * value.offset,width: MediaQuery.of(context.watch()).size.width*1.6,child: child,);
},child: IgnorePointer(child: Image.asset('assets/leopard.png')),);
}}
解决方法
主类是
class _MainPageState extends State<MainPage> {
final PageController _pageController = PageController();
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) {return PageOffsetNotifier(_pageController); },child: Scaffold(
body: Stack(
children: <Widget>[
PageView(
controller: _pageController,physics: ClampingScrollPhysics(),children: <Widget>[
//LeopardPage(),VultturePage(),],),LeopardPage(),);
}
}
,
要强制 Consumer
使用 ChangeNotifier
,您应该提供它之前,即
class LeopardPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => PageOffsetNotifier(),// lazy creation of model
child: Consumer<PageOffsetNotifier>(
builder:(context,value,child) {
return Positioned(
top: 100,left: -0.85 * value.offset,width: MediaQuery.of(context.watch()).size.width*1.6,child: child,);
},child: IgnorePointer(
child: Image.asset('assets/leopard.png')
),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。