Flutter基础(一)快速的认识flutter以及listview列表的简单实现

前序:flutter 就是将各个模块分解成一个个小部件,整个页面由许多个小部件组合而成。

一、将’hello’输出在屏幕的中间

1.需要用到两个小部件,一个是Center,另一个是Text。Text是包含在Center里的子部件。

import 'package:flutter/material.dart';

void main() {
  runApp(
    Center(
      child: Text(
        'hello',
        //textDirection:text从左到右对齐
        textDirection: TextDirection.ltr,
      ),
    )
  );
}

2.自定义部件App。

import 'package:flutter/material.dart';

void main()  => runApp(App());
 
 //自定义class App 作为自定义小部件。
class App extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Center(
      child: Text(
        'hello',
        textDirection: TextDirection.ltr,
      ),
    );
  }
}

3.设置字体的Style属性[TextStyle] 。

import 'package:flutter/material.dart';

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

class App extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Center(
      child: Text(
        'hello',
        textDirection: TextDirection.ltr,
        style: TextStyle(
          fontSize: 40.0,//设置字号大小
          fontWeight: FontWeight.bold,//设置文字的粗细:粗体字
          color: Colors.yellow, //设置字体颜色
        ),
      ),
    );
  }
}

4.使用界面组件与定制界面主题

import 'package:flutter/material.dart';

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

class App extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    //使用界面组件与定制界面主题
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('顶部栏'),
          elevation: 30.0, //添加阴影的效果
        ),
        body: Hello(),
      ),
      //设置主题风格
      theme: ThemeData(
        primarySwatch: Colors.yellow,//设置主题颜色
      ),
    );
  }
}

class Hello extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return  Center(
      child: Text(
        'hello',
        textDirection: TextDirection.ltr,
        style: TextStyle(
          fontSize: 40.0,//设置字号大小
          fontWeight: FontWeight.bold,//设置文字的粗细:粗体字
          color: Colors.yellow, //设置字体颜色
        ),
      ),
    );
  }
}

二.创建model文件,准备数据

1.新建一个文件夹model用来存放数据,之后创建post.dart。

定义一个List列表,列表项用来存放post类型。

class Post {
  Post({
    this.title,
    this.author,
    this.imageUrl,
    this.description,
  });

  final String title;
  final String author;
  final String imageUrl;
  final String description;

  bool selected = false;
}

final List<Post> posts = [
  Post(
    title: 'Candy Shop',
    author: 'Mohamed Chahin',
    description: 'Esse ut nulla velit reprehenderit veniam sint nostrud nulla exercitation ipsum. Officia deserunt aliquip aliquip excepteur eiusmod dolor. Elit amet ipsum labore sint occaecat dolore tempor officia irure voluptate ad. Veniam laboris deserunt aute excepteur sit deserunt dolor esse dolor velit sint nulla anim ut. Reprehenderit voluptate adipisicing culpa magna ea nulla ullamco consectetur. Cupidatat adipisicing consequat adipisicing sit consectetur dolor occaecat.',
    imageUrl: 'https://picsum.photos/id/142/600/400',
  ),
  Post(
    title: 'Childhood in a picture',
    author: 'Mohamed Chahin',
    description: 'Esse ut nulla velit reprehenderit veniam sint nostrud nulla exercitation ipsum. Officia deserunt aliquip aliquip excepteur eiusmod dolor. Elit amet ipsum labore sint occaecat dolore tempor officia irure voluptate ad. Veniam laboris deserunt aute excepteur sit deserunt dolor esse dolor velit sint nulla anim ut. Reprehenderit voluptate adipisicing culpa magna ea nulla ullamco consectetur. Cupidatat adipisicing consequat adipisicing sit consectetur dolor occaecat.',
    imageUrl: 'https://picsum.photos/id/142/600/400',
  ),
  Post(
    title: 'Contained',
    author: 'Mohamed Chahin',
    description: 'Esse ut nulla velit reprehenderit veniam sint nostrud nulla exercitation ipsum. Officia deserunt aliquip aliquip excepteur eiusmod dolor. Elit amet ipsum labore sint occaecat dolore tempor officia irure voluptate ad. Veniam laboris deserunt aute excepteur sit deserunt dolor esse dolor velit sint nulla anim ut. Reprehenderit voluptate adipisicing culpa magna ea nulla ullamco consectetur. Cupidatat adipisicing consequat adipisicing sit consectetur dolor occaecat.',
    imageUrl: 'https://picsum.photos/id/142/600/400',
  ),
  Post(
    title: 'Dragon',
    author: 'Mohamed Chahin',
    description: 'Esse ut nulla velit reprehenderit veniam sint nostrud nulla exercitation ipsum. Officia deserunt aliquip aliquip excepteur eiusmod dolor. Elit amet ipsum labore sint occaecat dolore tempor officia irure voluptate ad. Veniam laboris deserunt aute excepteur sit deserunt dolor esse dolor velit sint nulla anim ut. Reprehenderit voluptate adipisicing culpa magna ea nulla ullamco consectetur. Cupidatat adipisicing consequat adipisicing sit consectetur dolor occaecat.',
    imageUrl: 'https://picsum.photos/id/142/600/400',
  ),
];

2. 列表[Listview]和数据的结合。

重点:
	itemBuilder: _listItemBuilder   //使用自定义方法_listItemBuilder展示列表项目
内部实现:
	 Widget _listItemBuilder(BuildContext context, int index){
		//Container小部件
		return Container(
  			color: Colors.white,//设置背景颜色
  			margin: EdgeInsets.all(8.0),//设置container的外边距
 			 //列表项是垂直结构:依次是图->title->author
  			child: Column(
   				 children: <Widget>[
    				//网络图片
      				Image.network(posts[index].imageUrl),
      				//sizedbox 设置图与text之间的空格边距,相当于用sizedbox填充。
      				SizedBox(height: 16.0),
      				Text(
        				posts[index].title,
        				style: Theme.of(context).textTheme.bodyText1
      				),
      				Text(
          				posts[index].author,
         				style: Theme.of(context).textTheme.subtitle1
      				),
      				SizedBox(height: 16.0),
   			 ],
 		 ),
	);

}

完整版代码:
import 'package:flutter/material.dart';

import 'model/post.dart';

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

class App extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    //使用界面组件与定制界面主题
    return MaterialApp(
      home: Home(),
      //设置主题风格
      theme: ThemeData(
        primarySwatch: Colors.yellow,//设置主题颜色
      ),
    );
  }
}

class Home extends StatelessWidget{
/*******************列表内部每一个都是一个Widget*************************/
  Widget _listItemBuilder(BuildContext context, int index){
    //Container小部件
    return Container(
      color: Colors.white,//设置背景颜色
      margin: EdgeInsets.all(8.0),//设置container的外边距
      //列表项是垂直结构:依次是图->title->author
      child: Column(
        children: <Widget>[
        //网络图片
          Image.network(posts[index].imageUrl),
          //sizedbox 设置图与text之间的空格边距,相当于用sizedbox填充。
          SizedBox(height: 16.0),
          Text(
            posts[index].title,
            style: Theme.of(context).textTheme.bodyText1
          ),
          Text(
              posts[index].author,
              style: Theme.of(context).textTheme.subtitle1
          ),
          SizedBox(height: 16.0),
        ],
      ),
    );
  }
/********************************************************************/
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
        title: Text('顶部栏'),
        elevation: 30.0, //添加阴影的效果
        ),
        //列表视图
        body: ListView.builder(
          itemCount: posts.length, //列表视图的长度
            itemBuilder: _listItemBuilder,//使用自定义方法展示列表项目
        ),
      ),

    );
  }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值