热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

无限滚动实例_Flutter初探(四):滚动类Widgets

学习内容以下是可滚动Widgets的部分汇总:SingleChildScrollViewListViewGridViewCustomScrollView简单使用Sin
edbd858e3e5ebe4bfaf57aa70b108e56.png

学习内容

以下是可滚动Widgets的部分汇总:

  • SingleChildScrollView
  • ListView
  • GridView
  • CustomScrollView

简单使用

// SingleChildScrollView
class NewSingleChildScrollView extends StatelessWidget {@overrideWidget build(BuildContext context) {String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";return new Scaffold(appBar: AppBar(title: Text('SingleChildScrollView学习')),body: Scrollbar(child: SingleChildScrollView(padding: EdgeInsets.all(16.0),child: Center(child: Column(// 动态创建一个 Listchildren: str.split('')// 每个字母都用一个Text显示,设置字体大小为原来的两倍.map((c) => Text(c,textScaleFactor: 2.0,)).toList(),),),)),);}
}// ListView 一个无限加载实例
class InfiniteListView extends StatefulWidget {@override_InfiniteListViewState createState() => new _InfiniteListViewState();
}class _InfiniteListViewState extends State {static const loadingTag &#61; "##loading##"; //表尾标记var _words &#61; [loadingTag];&#64;overridevoid initState() {_retrieveData();}void _retrieveData() {Future.delayed(Duration(seconds: 2)).then((e) {_words.insertAll(_words.length - 1,//每次生成20个单词generateWordPairs().take(20).map((e) &#61;> e.asPascalCase).toList());setState(() {//重新构建列表});});}&#64;overrideWidget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text("ListView学习")),body: ListView.separated(itemCount: _words.length,itemBuilder: (context, index) {//如果到了表尾if (_words[index] &#61;&#61; loadingTag) {//不足100条&#xff0c;继续获取数据if (_words.length - 1 <100) {//获取数据_retrieveData();//加载时显示loadingreturn Container(padding: const EdgeInsets.all(16.0),alignment: Alignment.center,child: SizedBox(width: 24.0,height: 24.0,child: CircularProgressIndicator(strokeWidth: 2.0)),);} else {//已经加载了100条数据&#xff0c;不再获取数据。return Container(alignment: Alignment.center,padding: EdgeInsets.all(16.0),child: Text("没有更多了",style: TextStyle(color: Colors.grey),));}}//显示单词列表项return ListTile(title: Text(_words[index]));},separatorBuilder: (context, index) &#61;> Divider(height: .0),));}
}// 模拟异步获取数据并利用GirdView展示
class InfiniteGridView extends StatefulWidget {&#64;override_InfiniteGridViewState createState() &#61;> new _InfiniteGridViewState();
}class _InfiniteGridViewState extends State {List _icons &#61; []; //保存Icon数据&#64;overridevoid initState() {// 初始化数据_retrieveIcons();}&#64;overrideWidget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text(&#39;GridView&#39;)),body: GridView.builder(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, //每行三列childAspectRatio: 1.0 //显示区域宽高相等),itemCount: _icons.length,itemBuilder: (context, index) {//如果显示到最后一个并且Icon总数小于200时继续获取数据if (index &#61;&#61; _icons.length - 1 && _icons.length <200) {_retrieveIcons();}return Icon(_icons[index]);}),);}//模拟异步获取数据void _retrieveIcons() {Future.delayed(Duration(milliseconds: 200)).then((e) {setState(() {_icons.addAll([Icons.ac_unit,Icons.airport_shuttle,Icons.all_inclusive,Icons.beach_access,Icons.cake,Icons.free_breakfast]);});});}
}class CustomScrollViewTestRoute extends StatelessWidget {&#64;overrideWidget build(BuildContext context) {//因为本路由没有使用Scaffold&#xff0c;为了让子级Widget(如Text)使用//Material Design 默认的样式风格,我们使用Material作为本路由的根。return Material(child: CustomScrollView(slivers: [//AppBar&#xff0c;包含一个导航栏SliverAppBar(pinned: true,expandedHeight: 250.0,flexibleSpace: FlexibleSpaceBar(title: const Text(&#39;Demo&#39;),background: Image.asset("./images/avatar.png",fit: BoxFit.cover,),),),SliverPadding(padding: const EdgeInsets.all(8.0),sliver: new SliverGrid(//GridgridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, //Grid按两列显示mainAxisSpacing: 10.0,crossAxisSpacing: 10.0,childAspectRatio: 4.0,),delegate: new SliverChildBuilderDelegate((BuildContext context, int index) {//创建子widgetreturn new Container(alignment: Alignment.center,color: Colors.cyan[100 * (index % 9)],child: new Text(&#39;grid item $index&#39;),);},childCount: 20,),),),//Listnew SliverFixedExtentList(itemExtent: 50.0,delegate: new SliverChildBuilderDelegate((BuildContext context, int index) {//创建列表项return new Container(alignment: Alignment.center,color: Colors.lightBlue[100 * (index % 9)],child: new Text(&#39;list item $index&#39;),);}, childCount: 50 //50个列表项),),],),);}
}

部分效果&#xff1a;

611d98f053c9c0e49c3f9c9953b807ef.png
c3883d7e916d68fc7cbc63984468c573.png
71bb2b99b50353e21b7bdbdd7393d389.png
37d4c80b30192ef1fde17234d580bfc1.png

Summary

走马观花式的学习并不能带来高的学习效率&#xff0c;尤其是缺乏学习资料的技术&#xff0c;仅仅靠着一本书是不够的&#xff0c;需要深入思考&#xff0c;结合文档&#xff0c;源码应该才是最佳学习实践机会。



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 表达式树摘录(1)
    本文主要讲述ConstantExpression介绍表示具有常量值的表达式。ParameterExpression介绍表示命名的参数表达式。UnaryExpression介绍表示包 ... [详细]
author-avatar
小明爱微笑_401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有