Flutter 案例学习之:ListView

GitHub:https://github.com/happy-python/flutter_demos/tree/master/listview_demo

ListView
目录结构

lib/main.dart

import 'package:flutter/material.dart';
import 'package:listview_demo/pages/homepage.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Flutter Tutorial",
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

lib/model/city.dart

class City {
  final String name;

  final String image;

  final String population;

  final String country;

  City({this.name, this.image, this.population, this.country});

  static List<City> allCities() {
    var cities = List<City>();

    cities.add(City(
      name: "Delhi",
      country: "India",
      population: "19 mill",
      image: "delhi.png",
    ));
    cities.add(City(
      name: "London",
      country: "Britain",
      population: "8 mill",
      image: "london.png",
    ));
    cities.add(City(
      name: "Vancouver",
      country: "Canada",
      population: "2.4 mill",
      image: "vancouver.png",
    ));
    cities.add(City(
      name: "New York",
      country: "USA",
      population: "8.1 mill",
      image: "newyork.png",
    ));
    cities.add(City(
      name: "Paris",
      country: "France",
      population: "2.2 mill",
      image: "paris.png",
    ));
    cities.add(City(
      name: "Berlin",
      country: "Germany",
      population: "3.7 mill",
      image: "berlin.png",
    ));
    return cities;
  }
}

lib/pages/homepage.dart

import 'package:flutter/material.dart';
import 'package:listview_demo/model/city.dart';

class HomePage extends StatelessWidget {
  final List<City> _allCities = City.allCities();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Cites around world"),
      ),
      body: Padding(
        padding: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 0.0),
        child: ListView.builder(
          itemBuilder: (BuildContext context, int index) {
            return _getItemUI(context, index);
          },
          itemCount: _allCities.length,
        ),
      ),
    );
  }

  Widget _getItemUI(BuildContext context, int index) {
    return Card(
      child: Column(
        children: <Widget>[
          ListTile(
            leading: Image.asset(
              _allCities[index].image,
              fit: BoxFit.cover,
              width: 100.0,
            ),
            title: Text(
              _allCities[index].name,
              style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold),
            ),
            subtitle: Column(
              mainAxisAlignment: MainAxisAlignment.start,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Text(
                  _allCities[index].country,
                  style: TextStyle(
                    fontSize: 13.0,
                  ),
                ),
                Text(
                  "Population: ${_allCities[index].population}",
                  style: TextStyle(
                    fontSize: 11.0,
                  ),
                ),
              ],
            ),
            onTap: () {
              _showSnackBar(context, _allCities[index]);
            },
          )
        ],
      ),
    );
  }

  _showSnackBar(BuildContext context, City item) {
    Scaffold.of(context).showSnackBar(
      SnackBar(
        content: Text("${item.name} is a city in ${item.country}"),
        backgroundColor: Colors.amber,
      ),
    );
  }
}

由于所有这些图像都静态地包含在项目中,为了显示图像,我们需要在pubspec.yaml(主配置文件)中进行很少的配置,如下所示:

assets:
    - berlin.png
    - delhi.png
    - london.png
    - newyork.png
    - paris.png
    - vancouver.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 谷歌的 Flutter 为开发人员提供了一种构建 Android 和 iOS 原生用户界面的方法,为开发人员减少了...
    高级java架构师阅读 9,201评论 1 40
  • 唯心是人的想法,唯物是物的规律。 物质是原子的集中和分解,是变化的呈现,唯一不变的特性是永远在不断变化,唯一能确定...
    鹤一张阅读 300评论 0 0
  • Kyunwoo阅读 142评论 8 2
  • 今天晚上,我讲了一个故事。名叫:目不识丁。通过我读这个故事,我知道了:一个地主家的孩子姓丁。地主就...
    魏梓雅阅读 387评论 0 0
  • 缘起:将自己一周的所见所闻所想,加以整理,感觉还不错。 01 关于“好男人”与“好女人” 这学期选修了一门课程——...
    落叶之上阅读 313评论 0 2