ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# TextWidget文本组件 Flutter一切皆组件 ## TextWidget常用属性 1. textAlign(TextAlign):文本对齐属性(注意:若多行,则左中右都可,若单行,只靠左) 2. textDirection(TextDirection):文本方向 123 56=》65 123 2. maxLines(init):文本显示的最大行数 3. overflow(TextOverflow):控制文本的溢出效果 4. style(TextStyle): **style(TextStyle)**: 文字样式设计,主要有: fontSize(double):字体大小 color(Color,Colors):字体颜色 fontWeight(FontWeight):加粗 fontStyle(FontStyle):字体样式,斜体 decoration(TextDecoration): 文字装饰,比如下划线,中划线 decorationColor(Color,Colors):文字装饰的颜色 decorationStyle(TextDecorationStyle):文字装饰线条类型 decorationThickness(double):文字装饰线条宽度 letterSpacing():字间距(英文指每个字母之间,中文指每个字体之间) backgroundColor(Color,Colors):字体背景颜色, wordSpacing:字体间距离(英文指每个单词间) textBaseline:基线 shadows:绘制文字阴影 fontFamily:文字字体"Rock Salt" height:好像是设置line-height的 ~~~ child:Text( 'hello Flutter hello Flutter hello Flutter hello Flutter hello Flutter hello Flutter hello Flutter ', textAlign: TextAlign.justify, //left end center justify start // maxLines: 1, // overflow: TextOverflow.ellipsis,//clip(默认值),ellipsis(超出文本显示省略号) fade(超出部分渐变) style:TextStyle( fontSize:25.0, //需要写.0的形式,否则报错 浮点型 color: Color.fromARGB(255, 255, 150, 150),//a 代表透明度(0-255) decoration: TextDecoration.lineThrough, //lineThrough none overline underline decorationStyle: TextDecorationStyle.dotted // 下划线样式 dashed dotted double solid ) ) ~~~ ## Container容器组件(相当于div) 1. Alignment属性的使用 2. 设置宽高和颜色 ~~~ body:Center( child: Container( child: new Text( 'Hello Flutter2', style: TextStyle( fontSize: 40.0, ) ), // 9中对齐方式bottomCenter bottomLeft bottomRight // center centerLeft centerRight topCenter topLeft topRight alignment: Alignment.center, width: 500.0, height: 400.0, color: Colors.lightBlue // color也是一个组件 ) ) ~~~ 1. Padding内边距属性的使用 2. margin外边距属性的使用 3. decoration属性制作彩色背景 ### padding内边距属性 1. EdgeInsets.all():统一设置 2. EdgeInsets.formLTRB(value1, value2, value3, value4):即(left,top,right,bottom) ### decoration修饰器 1. 设置容器的边框 2. BoxDecoration Widget讲解 3. LinearGradient设置背景颜色渐变 ~~~ child: Container( child: new Text( 'Hello Flutter2', style: TextStyle( fontSize: 40.0, ) ), // 9中对齐方式bottomCenter bottomLeft bottomRight // center centerLeft centerRight topCenter topLeft topRight alignment: Alignment.topLeft, width: 500.0, height: 400.0, // color: Colors.lightBlue, // 渐变背景不能用color属性 //const EdgeInsets.all(20.0) all表示上下左右边距都一样 padding: const EdgeInsets.fromLTRB(10.0,30.0, 0.0, 0.0), margin: const EdgeInsets.all(10.0),//外边距 decoration: new BoxDecoration( gradient: const LinearGradient( colors:[ //三种颜色的渐变 Colors.lightBlue, Colors.greenAccent, Colors.purple ] ) ), ) ) ~~~ ## Image图片组件的使用 1. Image Widget的几种加入形式 2. Fit属性的详细讲解 3. 图片的混合模式 4. Repeat属性让图片重复 ### Image Widget的几种加入形式 1. Image.asset:加载资源图片,会使打包时包体过大 2. Image.network:网络资源图片,经常换的或者动态的图片 3. Image.file:本地图片,比如相机照相后的图片预览 4. Image.memory:加载到内存中的图片,Uint8List(不常用) ~~~ child: Container( //网络地址 child: Image.network( 'http://szimg.mukewang.com/5baf3f0a000180df06000338-360-202.jpg', scale: 2,//flutter中的缩放和以前的缩放不太一样,值越大图片越小 //fill充满容器,以容器为主宰,不管图片是否拉伸 // contain 全图显示,显示原比例,显示图片最大模式,可能会有空隙,以容器为基础,最大显示图片,图片没有变形 // cover 可能被拉伸或裁切,图片要充满这个容器,不会有缝隙 // fitWidth宽度是充满的 fitHeight高度是充满的 //scaleDown 最不常用,要保持原图片大小,根据容器选择,除非图片大于容器有效果 // fit: BoxFit.contain, //color: Colors.greenAccent, //混合模式 darken colorBurn colorDodge difference dst exclusion // colorBlendMode: BlendMode.colorDodge, //重复模式 repeat noRepeat(不重复) repeat repeatX repeatY repeat: ImageRepeat.repeat ), width:300.0, height: 300.0, color:Colors.lightBlue ) ~~~ ## ListView组件的使用(列表组件) 1. listView的基本语法 2. listTile的使用(列表中的一列,其他容器也可使用) 3. 做个图片列表 ~~~ import 'package:flutter/material.dart'; //runApp中有一个最起码的组件Widget ,自己定义MyApp void main() => runApp(MyApp()); //继承静态组件 class MyApp extends StatelessWidget{ //重写 build方法,返回Widget,build接收一个上下文参数 context @override Widget build(BuildContext context){ return MaterialApp( title: 'Flutter demo', //home表示手机页面的主体,需要一个脚手架Scaffold,它也是一个组件 home: Scaffold( appBar: new AppBar( title: new Text('ListView Widget') ), body: new ListView( // children是一个列表组件,返回的是一个数组 children: <Widget>[ // ListTile列表瓦片,列表用瓦片一层层盖住展示 /* new ListTile( // leading:开始的位置 leading: new Icon(Icons.border_right), title: new Text('border_right'), ), new ListTile( // leading:开始的位置 leading: new Icon(Icons.android), title: new Text('android'), ), new ListTile( // leading:开始的位置 leading: new Icon(Icons.arrow_back_ios), title: new Text('arrow_back_ios'), ), */ new Image.network('http://szimg.mukewang.com/5ac2dfe100014a9005400300-360-202.jpg'), new Image.network('http://szimg.mukewang.com/5becd5ad0001b89306000338-360-202.jpg'), new Image.network('http://szimg.mukewang.com/5c0886650001e7b106000338-360-202.jpg'), new Image.network('http://szimg.mukewang.com/5baf3f0a000180df06000338-360-202.jpg'), new Image.network('http://szimg.mukewang.com/5b17bad10001535305400300-360-202.jpg') ] ) ) ); } } ~~~ ## 横向列表的使用 1. 制作 2. scrollDirection属性的讲解 3. 代码优化,自定义组件(目前嵌套非常多) ### scrollDirection属性讲解 1. Axis.horizontal:横向滚动(水平方法) 2. Axis.vertical:纵向 ~~~ body: Center( //child表示需要其他的子组件 child: Container( height: 200.0, //容器里的子组件 child: new ListView( //方向 scrollDirection: Axis.horizontal, children: <Widget>[ new Container( width: 180.0, color: Colors.lightBlue, ), new Container( width: 180.0, color: Colors.lightGreen, ), new Container( width: 180.0, color: Colors.amber, ), new Container( width: 180.0, color: Colors.deepOrange, ), ], ), ), ) ~~~ 问题: 列表嵌套太多 自定义组件 ~~~ class MyList extends StatelessWidget{ @override Widget build(BuildContext context){ return ListView( //方向 scrollDirection: Axis.horizontal, children: <Widget>[ new Container( width: 180.0, color: Colors.lightBlue, ), new Container( width: 180.0, color: Colors.lightGreen, ), new Container( width: 180.0, color: Colors.amber, ), new Container( width: 180.0, color: Colors.deepOrange, ), ] ); } } child: Container( height: 200.0, //容器里的子组件 child: new MyList(), ), ~~~ ## 动态列表的使用 1. Dart中List类型的使用(数组) 2. 传递和接收参数,实现动态列表的基础 3. 动态列表案例制作 ### Dart中List的使用 1. List,可理解为js中的数组 2. 声明List的四种声明方式 new List(), new List(3)//长度, new List<String>()//类型, [1,2,3,4] ### 参数的传递和接受 ~~~ //runApp中有一个最起码的组件Widget ,自己定义MyApp void main() => runApp(MyApp( items: new List<String>.generate(1000, (i)=>"Item $i")//使用生成器 )); //继承静态组件 class MyApp extends StatelessWidget{ //声明变量 final List<String> items; // 构造方法 key为默认的参数 @required表示必须传入的参数 // MyApp是继承的是无名参的 ,所以需要调用super方法 MyApp({Key key, @required this.items}):super(key:key); //重写 build方法,返回Widget,build接收一个上下文参数 context @override Widget build(BuildContext context){ return MaterialApp( title: 'Flutter demo', //home表示手机页面的主体,需要一个脚手架Scaffold,它也是一个组件 home: Scaffold( appBar: new AppBar( title: new Text('ListView Widget') ), // builder表示动态列表的意思 body: new ListView.builder( //列表长度 itemCount: items.length, // 列表实际显示的样子 itemBuilder: (context, index){ return new ListTile( title: new Text('${items[index]}') ); } ) ) ); } } ~~~