flutter ListView

ListView class, flutter里面的滚动列表,用它可以代替我们常用的scrollView,实现tableView效果也是首选。后续文章会结合GridView class来实现一个首页顶部的广告栏横向轮播,以及商品瀑布流的展示。
文档中,给出了下面三种调用方式
  • 动态列表,通过ListView.builder。默认情况下,ListView将自动填充列表的可滚动末端,以避免MediaQuery填充指示的部分障碍,使用零填充属性覆盖可以避免此行为。
import 'package:flutter/material.dart';

class Home extends StatelessWidget {
  @override

  Widget build(BuildContext context) {
    // TODO: implement build
    return new Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child:Container(
          height: 200.0,
          child: TopAd(
              items:new List<String>.generate(10, (i)=>"Item $i")
          ),
        ),

      )
    );
  }
}


class TopAd  extends StatelessWidget{
  @override
  final List<String> items;
  TopAd({key,@required this.items}):super(key:key); //重写构造方法

  Widget build(BuildContext context) {
    // TODO: implement build
    return ListView.builder(
         padding: EdgeInsets.all(8.0),
        itemBuilder: (context,index){
          return new ListTile(
            title:  new Text('${items[index]}'),
          );
        },
      itemCount: items.length,
    );
  }
}
  • 静态列表,通过 ListView 或者 CustomScrollView创建对象,直接往children属性里面添加视图。
ListView(
  shrinkWrap: true,
  padding: const EdgeInsets.all(20.0),
  children: <Widget>[
    const Text('I\'m dedicating every day to you'),
    const Text('Domestic life was never quite my style'),
    const Text('When you smile, you knock me out, I fall apart'),
    const Text('And I thought I was so smart'),
  ],
)

CustomScrollView(
  shrinkWrap: true,
  slivers: <Widget>[
    SliverPadding(
      padding: const EdgeInsets.all(20.0),
      sliver: SliverList(
        delegate: SliverChildListDelegate(
          <Widget>[
            const Text('I\'m dedicating every day to you'),
            const Text('Domestic life was never quite my style'),
            const Text('When you smile, you knock me out, I fall apart'),
            const Text('And I thought I was so smart'),
          ],
        ),
      ),
    ),
  ],
)
我们可以发觉ListView是默认纵向滑动的,那我们如何设置它为横向滑动呢?设置scrollDirection !
  • Axis.horizontal 横向滚动
  • Axis.vertiacal 纵向滚动
import 'package:flutter/material.dart';
import 'dart:ui';
import 'dart:math';

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Scaffold(
      backgroundColor: Colors.white,
      body:
      Center(
        child:Container(
          height: 200.0,
          child: TopAd(),
        ),

      )
    );
  }
}


class TopAd  extends StatelessWidget{
  @override

  var random = Random();
  Widget build(BuildContext context) {
    // TODO: implement build
    return ListView(
      scrollDirection: Axis.horizontal,
      children: <Widget>[
        Container(
          width: window.physicalSize.width,
          color: Color.fromARGB(random.nextInt(256), random.nextInt(256), random.nextInt(256), 1),
        ),
        Container(
          width: 150.0,
          color: Color.fromARGB(random.nextInt(256), random.nextInt(256), random.nextInt(256), 1),
        ),
      ],
    );
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ListView 是一个线性布局的widgets 列表.ListView -extends->BoxScrol...
    浩林Leon阅读 56,713评论 5 15
  • 1.UITableView在有导航条的情况下,布局从0开始没问题,但是在没有导航条的情况下,布局从0开始会把状态栏...
    宙斯YY阅读 178评论 0 0
  • 红橙黄绿青蓝紫 一轮红红的太阳 一间橙色的房子 一盏黄色的路灯 一亩绿色的森林 一处青青的草地 一角蓝色的天空 一...
    琦思描想阅读 289评论 0 0