在Flutter中,我们可以将文本的控制显示分成两类:
控制文本布局的参数: 如文本对齐方式 textAlign、文本排版方向 textDirection,文本显示最大行数 maxLines、文本截断规则 overflow 等等,这些都是构造函数中的参数;
控制文本样式的参数: 如字体名称 fontFamily、字体大小 fontSize、文本颜色 color、文本阴影 shadows 等等,这些参数被统一封装到了构造函数中的参数 style 中;
下面我们来看一下其中一些属性的使用:
class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Text( "《定风波》 苏轼 \n莫听穿林打叶声,何妨吟啸且徐行。\n竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。", style: TextStyle( fontSize: 20, color: Colors.purple ), ); } }
我们可以通过一些属性来改变Text的布局:
class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Text( "《定风波》 苏轼 \n莫听穿林打叶声,何妨吟啸且徐行。\n竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。", textAlign: TextAlign.center, // 所有内容都居中对齐 maxLines: 3, // 显然 "生。" 被删除了 overflow: TextOverflow.ellipsis, // 超出部分显示... // textScaleFactor: 1.25, style: TextStyle( fontSize: 20, color: Colors.purple ), ); } }
class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Text.rich( TextSpan( children: [ TextSpan(text: "《定风波》", style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold, color: Colors.black)), TextSpan(text: "苏轼", style: TextStyle(fontSize: 18, color: Colors.redAccent)), TextSpan(text: "\n莫听穿林打叶声,何妨吟啸且徐行。\n竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。") ], ), style: TextStyle(fontSize: 20, color: Colors.purple), textAlign: TextAlign.center, ); } }
按钮的基础
Material widget库中提供了多种按钮Widget如FloatingActionButton、RaisedButton、FlatButton、OutlineButton等
class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: <Widget>[ FloatingActionButton( child: Text("FloatingActionButton"), onPressed: () { print("FloatingActionButton Click"); }, ), RaisedButton( child: Text("RaisedButton"), onPressed: () { print("RaisedButton Click"); }, ), FlatButton( child: Text("FlatButton"), onPressed: () { print("FlatButton Click"); }, ), OutlineButton( child: Text("OutlineButton"), onPressed: () { print("OutlineButton Click"); }, ) ], ); } } RaisedButton( child: Text("同意协议", style: TextStyle(color: Colors.white)), color: Colors.orange, // 按钮的颜色 highlightColor: Colors.orange[700], // 按下去高亮颜色 shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), // 圆角的实现 onPressed: () { print("同意协议"); }, )
图片可以让我们的应用更加丰富多彩,Flutter中使用Image组件
Image组件有很多的构造函数,我们这里主要学习两个:
加载网络图片
相对来讲,Flutter中加载网络图片会更加简单,直接传入URL并不需要什么配置,所以我们先来看一下Flutter中如何加载网络图片。
我们先来看看Image有哪些属性可以设置:
const Image({ ... this.width, //图片的宽 this.height, //图片高度 this.color, //图片的混合色值 this.colorBlendMode, //混合模式 this.fit,//缩放模式 this.alignment = Alignment.center, //对齐方式 this.repeat = ImageRepeat.noRepeat, //重复方式 ... })
class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Container( child: Image.network( "http://img0.dili360.com/ga/M01/48/3C/wKgBy1kj49qAMVd7ADKmuZ9jug8377.tub.jpg", alignment: Alignment.topCenter, repeat: ImageRepeat.repeatY, color: Colors.red, colorBlendMode: BlendMode.colorDodge, ), width: 300, height: 300, color: Colors.yellow, ), ); } }
3.2. 加载本地图片
加载本地图片稍微麻烦一点,需要将图片引入,并且进行配置
class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Container( width: 300, height: 300, color: Colors.yellow, child: Image.asset("images/test.jpeg"), ), ); } }
配置文件在pubsepc.yaml文件中配置
assets: -assets/images/