Flutter的ListView

1.构建本地模型,在实际应用中一般会从网络中获取模型数据

post.dart

class Post {

  const Post({

    this.title,

    this.author,

    this.imageUrl,

  });

  final String title;

  final String author;

  final String imageUrl;

}

final List posts = [

    Post(

      title: 'Candy Shop',

      author: 'Mohamed Chahin',

      imageUrl: 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1554172475&di=e1d97f537fdf9fab5f1bdb17f6e23681&src=http://pic9.nipic.com/20100825/4139254_123008053611_2.jpg'

    ),

    Post(

      title: 'Childhood in a picture',

      author: 'Mohamed Chahin',

      imageUrl: 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1554172475&di=e1d97f537fdf9fab5f1bdb17f6e23681&src=http://pic9.nipic.com/20100825/4139254_123008053611_2.jpg'

    ),

    Post(

      title: 'Contained',

      author: 'Mohamed Chahin',

      imageUrl: 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1554172475&di=e1d97f537fdf9fab5f1bdb17f6e23681&src=http://pic9.nipic.com/20100825/4139254_123008053611_2.jpg'

    ),

];

2.listview的数据导入和界面显示

Widget build(BuildContext context) {
    // TODO: implement build
    return ListView.builder(
      //列表控件
      itemCount: posts.length,
      itemBuilder: _listItemBuilder,
    );
  }

3.listViewItem的具体布局

Widget _listItemBuilder(BuildContext context, int index) {
    return Container(
      color: Colors.white, //背景色
      margin: EdgeInsets.all(8.0), //外边距
      child: Stack(
        children: [
          Column(
            children: [
              AspectRatio(//Image
                aspectRatio: 16 / 9,
                child: Image.network(posts[index].imageUrl),
              ),
              SizedBox(height: 16.0),
              Text(//title
                posts[index].title,
                style: Theme.of(context).textTheme.title,
              ),
              Text(//author
                posts[index].author,
                style: Theme.of(context).textTheme.subhead,
              ),
            ],
          ),
          Positioned.fill(
            child: Material(
              color: Colors.transparent,
              child: InkWell(
                splashColor: Colors.white.withOpacity(0.3),
                highlightColor: Colors.white.withOpacity(0.1),
                onTap: () {
                  Navigator.of(context).push(MaterialPageRoute(builder: (context)=>PostShow(post:posts[index])));
                },
              ),
            ),
          )
        ],
      ),
    );
  }

你可能感兴趣的:(Flutter的ListView)