范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

七爪源码在Flutter中使用PageViewBuilder构建折叠滚动

  在本文中,我们将创建一个类似于 LOUIS VUITTON 移动应用程序的列表视图的水平滚动。
  最终应用程序的工作原理如下:
  在深入研究编码之前,让我们讨论将在此应用程序中使用的小部件。
  页面预览
  PageView 是一个小部件,它生成可滚动的屏幕页面。 这些页面可以是由构建器功能构建的固定页面或重复页面。
  PageView 在构造元素时的行为类似于 ListView。 PageView 还允许用户在 Flutter 应用程序中的不同屏幕之间切换。
  PageView 类的构造函数PageView({Key key,  Axis scrollDirection,  bool reverse,  PageController controller,  ScrollPhysics physics,  bool pageSnapping,  void Function(int) onPageChanged,  List children,  DragStartBehavior dragStartBehavior,  bool allowImplicitScrolling})
  PageView 小部件的属性: scrollDirection:它定义页面在哪个轴上滚动,即垂直或水平 reverse:定义滚动方向。默认设置为 false。 控制器:它允许我们操作在 PageView 中可见的页面。 物理:它定义了当页面无法拖动时页面在页面端点处的动画效果。 pageSnapping:对于自定义滚动行为很有用。它采用布尔值。 onPageChanged:页面有变化时触发的函数。 children:它包含小部件列表。 dragStartBehaviour:此属性将 DragStartBehavior 枚举(最终)保存为对象。它控制开始注册拖动行为的方式。 allowImplicitScrolling:此属性接受一个布尔值作为对象。它控制是否将隐式滚动分配给小部件的页面。
  PageView.builder
  PageView.builder 创建一个可滚动列表,该列表使用按需创建的小部件逐页工作。
  此构造函数适用于具有大量(或无限)子级的页面视图,因为仅对那些实际可见的子级调用构建器。
  提供非空 itemCount 让 PageView 计算最大滚动范围。
  PageView.builder 小部件的属性
  它拥有 PageView 的所有属性,并拥有一些自己的属性。 itemBuilder:只有索引大于或等于零且小于 itemcount 时才会调用它。 restoralionID:restoreidID 以字符串为对象。它用于保存滚动位置并在以后恢复它。 clipBehaviour:内容将根据此选项进行剪辑(或不剪辑)。 padEnds:是否在列表的两端添加填充。
  堆
  Stack 是 Fl utter SDK 的内置小部件,允许用户将小部件保持在彼此之上,从而形成小部件层。第一个小部件是最底部的项目,最后一个小部件是最顶部的项目。
  Stack 小部件的一些关键点是:堆栈中的孩子可以定位或不定位。定位子项是那些包装在具有至少一个非空属性的定位小部件中的子项。堆栈自己调整大小以包含所有未定位的子项,这些子项根据对齐方式进行定位(在从左到右的环境中默认为左上角,在从右到左的环境中默认为右上角)。然后根据它们的 top、right、bottom 和 left 属性相对于堆栈放置定位的子项。对齐属性可用于更改小部件的对齐方式。
  让我们深入了解
  首先,我们创建将在我们的应用程序中使用的数据。
  在 lib 文件夹中创建 dummy_data.dart。在这里,我们放置项目数组。
  dummy_data.dart:var model = [       "https://images-static.nykaa.com/uploads/f5a1d948-7947-4241-a08e-caac8d991c48.jpg?tr=w-300,cm-pad_resize",       "https://images-static.nykaa.com/uploads/c622c7aa-7cdb-43ba-98b7-acb48df7f7c5.jpg?tr=w-300,cm-pad_resize",       "https://images-static.nykaa.com/uploads/fea188e3-9067-4c1f-a3a3-07560f60d73d.jpg?tr=w-300,cm-pad_resize",       "https://images-static.nykaa.com/uploads/2f2275d3-0b85-4189-8fb3-7318ca1c3bec.jpg?tr=w-300,cm-pad_resize",       "https://images-static.nykaa.com/uploads/9a4d3606-9aeb-4285-8db1-4918428a1c76.jpg?tr=w-300,cm-pad_resize",       "https://images-static.nykaa.com/uploads/455bf3cd-82d4-4b2c-ab5d-e56491edc0f1.jpg?tr=w-300,cm-pad_resize", ];
  数据已准备就绪,现在让我们创建将成为网页浏览项目的小部件。 在 lib 文件夹中创建 page_view_item.dart。
  page_view_item.dartimport "package:flutter/material.dart";  class PageViewItem extends StatelessWidget {   final int index;   final String url;   final double width;   static const String name="";   static const String price="";    const PageViewItem({     Key? key,     required this.index,     required this.width,     required this.url,   }) : super(key: key);    @override   Widget build(BuildContext context) {     return InkWell(       onTap: () => print(index),       child: Card(         elevation: 5,         shape: RoundedRectangleBorder(           borderRadius: BorderRadius.circular(1.0),         ),         child: Image.network(           url,           fit: BoxFit.cover,            width: width,         ),       ),     );   } }
  接下来我们创建 homepage.dart 文件:
  首先,我们配置页面视图并创建提供 viewportFraction 的 PageController。final _controller = PageController(    viewportFraction: 0.5,  );
  视口分数
  它定义了每个页面应该占据的视口部分。 默认为 1.0,这意味着每个页面在滚动方向上填充视口。
  当我们的控制器被设置后,我们会计算页面浏览量的单个项目的宽度。late final _itemWidth =MediaQuery.of(context).size.width * _controller.viewportFraction;
  然后我们在 initState 中初始化控制器。@override  void initState() {     super.initState(); _controller.addListener(() => setState(() {           _page = _controller.page!;         }));  }
  这就是我们的 homepage.dart 文件的外观。
  homepage.dart: import "package:flutter/src/foundation/key.dart"; import "package:flutter/src/widgets/framework.dart";  import "package:flutter/material.dart";  import "dummy_data.dart"; import "page_view_item.dart"; class HomePage extends StatefulWidget {   const HomePage({Key? key}) : super(key: key);    @override   State createState() => _HomePageState(); }  class _HomePageState extends State {    /// The current page of the page view    double _page = 0;    /// The index of the leftmost element of the list to be displayed   int get _firstItemIndex => _page.toInt();    /// Controller to get the current position of the page view   final _controller = PageController(     viewportFraction: 0.5,   );    /// The width of a single item   late final _itemWidth =       MediaQuery.of(context).size.width * _controller.viewportFraction;  @override   void initState() {     super.initState();     _controller.addListener(() => setState(() {           _page = _controller.page!;         }));   }    @override   void dispose() {     super.dispose();   }   @override   Widget build(BuildContext context) {     return Scaffold(       appBar: AppBar(title: const Text("LV Scroll"),              ),       body: Column(           crossAxisAlignment: CrossAxisAlignment.start,         children: [                      Stack(           children: [             Positioned.fill(               child: Align(                 alignment: Alignment.centerLeft,                 child: SizedBox(                   width: _itemWidth,                   child: FractionallySizedBox(                      child: PageViewItem(                       index: _firstItemIndex,                       width: _itemWidth,                       url: model[_firstItemIndex],                      ),                   ),                 ),               ),             ),             SizedBox(               height: 250,               child: PageView.builder(                 padEnds: false,                 controller: _controller,                 itemBuilder: (context, index) {                   return Opacity(                     opacity: index <= _firstItemIndex ? 0 : 1,                     child: PageViewItem(                       index: index,                        width: _itemWidth,                       url: model[index],                      ),                   );                 },                 itemCount: model.length,               ),             ),           ],     ),         ],       ),     );   } }
  结论
  我希望这篇文章对你有所帮助,并且你学到了新的东西。 我在这篇文章中使用了各种对你们中的一些人来说可能是新的东西。

公鸡为什么比母鸡漂亮?耿耿于怀六十年,百思不得其解,不吐不快这是一个真实的故事。5岁那年,妈妈带我去幼儿园入园考试。开始,老师拿着好多的图片,问了好多问题,反正我尽力一一作了回答。后来,老师放下了图片,问我公鸡生蛋还是母鸡生蛋?那个年代,没阆中熊猫乐园里面没有熊猫,外地游客购票后大骂骗子日前,一则外地女游客在阆中熊猫乐园售票处大骂骗子,退钱的视频,引发了不少网友的关注。通过视频简介可以得知,该外地游客买票后,才得知熊猫乐园已经没有熊猫了,感觉自己受了骗,继而大闹售文体旅游年味浓2月9日,重庆市酉阳土家族苗族自治县菖蒲高山生态旅游度假区出现雪凇云海美景。雪后初霁,银装素裹,玉树琼枝,美不胜收。邱洪斌摄(中经视觉)2月9日,游客在北京前门大街北口的冬奥主题花世业洲开心休博园春节假期共接待游客2万人次春节假期,世业洲开心休博园共接待游客2万人次,该园精心策划的传统文化活动受游客喜爱。2月6日,小编在开心休博园看到,极具民俗文化特色的舞狮节目正在上演,表演者通过不同的马步,配合狮你厨房里珍藏的油,危险可能比你想象的大花生油富含丰富的维生素E,具有明显的抗氧化抗衰老功能,同时在预防心脑血管疾病,润燥滑肠方面表现优异,受到很多家庭的喜爱。但花生在存储运输的过程中同意产生黄曲霉毒素,黄曲霉毒素是迄今晨起第一杯水这样喝,养生水变伤命水一代文学奇才曹雪芹说过女人是水做的。其实,人都是水做的。生命的起源孕育和维持,都离不开水。如果没有水,人体就无法维持血液循环呼吸消化排泄体温恒定等生理活动。图源网络当然,只知道要喝久泄肝气乘脾的舌象肝气乘脾舌边红主症泄泻,胃脘胀痛,急躁易怒舌尖为心肺所属,舌尖红为郁火则胸闷憋气,夜眠不实舌尖中部凹陷多为慢性咽炎舌中部为脾胃,凹陷则虚则胃胀消化不良舌边暗红为肝郁火旺急躁易怒舌根一杯养生茶三个养生穴远离节后综合征节日过后,你是否感觉迟迟进入不了工作状态?会否容易疲劳乏力失眠多梦?是否出现腹胀胃口不佳的症状?专家表示,经历作息紊乱饮食不节的假期后,刚回到工作岗位上,不少人会出现这类节后综合征33岁阿黛尔斩获三项大奖!穿迷你小黑裙没有腰,脸上皱纹太明显了当地时间2月8日,阿黛尔参加了全英音乐奖的颁奖典礼,一举斩获三项大奖的阿黛尔成为了有史以来的第一位无性别的年度艺人,她绝对算是当晚的最大赢家。阿黛尔在颁奖典礼上连换两套造型,都以裙轰2735!小波特天神下凡,英格拉姆肃然起敬,火箭他价值6000万在今天结束的一场比赛中,鹈鹕11097击败火箭。本场比赛埃里克戈登仍然无法出战,火箭对于他应该是保护起来了。就看对戈登有意的球队给出什么的筹码,毕竟交易截止日11号凌晨就截止了。现冬奥会上的内蒙古身影草原因你而骄傲图为赵丹。呼和浩特市政府供图(北京冬奥会)综述冬奥会上的内蒙古身影草原因你而骄傲中新网呼和浩特2月9日电题冬奥会上的内蒙古身影草原因你而骄傲中新网记者李爱平赵丹丁雨欢来自内蒙古大草
跑男团以自身经历做演讲,沙溢最鸡汤,白鹿最励志,baby最接地气要说今年最火的综艺节目是什么,那绝对是披荆斩棘的哥哥。现在这档节目虽然已经收官了,但热度依然不减,甚至还有很多观众二刷。即便是这么火的一档综艺,依然会被其他综艺超越。作为一档老牌综小小彬5岁成名,被生父继母吸血1800万,皮肤溃烂无钱治世人说小孩是上天送给父母天使,应该受到疼爱和呵护。世界上是大多数父母也是把小孩当天使般疼爱,含在嘴巴里怕化了,捧在手里怕摔了。但是也有例外,有的父母却像吸血鬼一样,把小孩当成摇钱树爵士队2节轰下39分!戈贝尔连续强打卡佩拉,卡特在场边观战NBA常规赛继续进行,上一场输球的老鹰队回到主场迎战西部劲旅爵士队。非常胶着的半场比赛,老鹰队和爵士队连续肉搏,老鹰队2节轰下40分,仅领先爵士队1分。双方的都保持着高强度的防守,中国羽协回应世界羽联处罚中国球员的决定11月5日,中国羽毛球协会在其官方网站上发布了一则公告,全文如下中国羽毛球协会近日收到世界羽联关于中国运动员朱俊豪张滨榕在2019年的国际比赛中违反了世界羽联反赌球及操纵比赛结果法开赛至今表现最令人失望的十位CBA球员2122赛季的CBA联赛开赛已经超过半月时间,不少CBA球员都在这个赛季呈现出了崛起的态势又或者是交出令人印象深刻的惊喜表现,比如高诗岩郭艾伦陶汉林贺希宁等等。与之相对应的是,有一深度分析谁将成为本赛季NBA第1位下课的主帅?新赛季的NBA已经开赛三周,有球队是冠军争夺者也有球队直奔状元签而去。各只球队都打了10场比赛左右,有好几支球队表现不如人意,那么谁将成为最可能下课的主教练呢?我们先看看东西部战绩2名球员的球衣名字,都印错了!CBA,太业余了?好好改改吧最近的CBA,真是负面新闻不断。先是2位裁判员,叶楠魏国梁,在国际篮联技术官员认证体能测试中串谋作弊,将撤销两人的国家级篮球裁判员技术等级资格。然后,郭艾伦在昨晚的比赛中,被吹2次危险的极兔68亿豪赌胜算几何?每经记者赵雯琪陈婷王郁彪商业世界里,后来者居上的戏码屡次上演。而在中国快递行业,四通一达外加顺丰多年竞争形成了默契与平衡,虽常有价格战,但总体格局稳如镜面,很难想象会有后发制人的逆小空间蕴藏大商机客厅经济是市场蓝海李苑随着年轻人成为消费主力军,追求个性注重性价比和体验感渐成主流消费趋势,这一点,在客厅经济的发展上表现得淋漓尽致。有预测显示,2021年中国客厅经济的整体商业价大涨之后就会大跌!今天周五,A股还会重演历史吗?导语大涨之后就会大跌!今天周五,A股还会重演历史吗?昨天普涨的行情,感觉又是牛市的氛围,全市场31的涨跌比,超过100家公司涨停,跟周三周二那会是反着来的。A股最近的走法,真的是一坐过牢的四位巨星,出狱后反而功成名就,个个家喻户晓第一名古天乐当年的古仔气血方刚,意气用事,替朋友顶罪入狱,被判一年监禁,后来在狱中聚众斗殴加判一年。出狱后他热衷于公益事业,创建希望小学,被人们称为古校长。后来成为香港艺人协会会长