一、 继承StatelessWidget组件
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
//TODO:implementbuild
return Center(
child: Text(
"My name is maple",
textDirection: TextDirection.ltr,
),
);
}
}
二、Text组件
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
//TODO:implementbuild
return Center(
child: Text(
"My name is maple",
textDirection: TextDirection.ltr,
style: TextStyle(
fontSize: 40.0, //字体大小
fontWeight: FontWeight.bold, //字体粗细
color: Colors.yellow //字体颜色
),
),
);
}
}
三、MaterialApp顶层组件
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final routes = {
'/': (BuildContext context) => new Home(),
};
@override
Widget build(BuildContext context) {
//TODO:implementbuild
return MaterialApp(
title: "标题",
//主题
theme:
ThemeData(primarySwatch: Colors.red, brightness: Brightness.light),
// 主页
// home: Home(),
// 路由
routes: routes);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Text(
"My name is maple",
textDirection: TextDirection.ltr,
style: TextStyle(
fontSize: 30.0, //字体大小
fontWeight: FontWeight.bold, //字体粗细
color: Colors.yellow //字体颜色
),
),
);
}
}
四、Text,Container 组件
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
//TODO:implementbuild
return MaterialApp(
title: "标题",
//主题
theme: ThemeData(primarySwatch: Colors.red, brightness: Brightness.light),
// 主页
home: Scaffold(
appBar: AppBar(
title: Text('Flutter'),
elevation: 30.0,
),
body: Home()),
//设置标题阴影 不需要的话值设置成 0.0
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
// Container类似于css的div
child: Container(
child: Text(
"My name is maple and I like to eat",
textAlign: TextAlign.center,
//文本对齐方式
overflow: TextOverflow.ellipsis,
//文字超出屏幕之后的处理方式(clip 裁剪,fade 渐隐,ellipsis 省略号)
textScaleFactor: 1.5,
//字体显示倍率
textDirection: TextDirection.ltr,
//文本方向(ltr 从左至右,rtl 从右至 左)
maxLines: 2,
//文字显示最大行数
style: TextStyle(
fontSize: 25.0, //字体大小
fontWeight: FontWeight.bold, //字体粗细
color: Colors.red, //字体颜色
fontStyle: FontStyle.italic, //文字样式(italic 斜体,normal 正常体)
),
),
//topCenter:顶部居中对齐
// topLeft:顶部左对齐
// topRight:顶部右对齐
// center:水平垂直居中对齐
// centerLeft:垂直居中水平居左对齐
// centerRight:垂直居中水平居右对齐
// bottomCenter 底部居中对齐
// bottomLeft:底部居左对齐
// bottomRight:底部居右对齐
alignment: Alignment.topLeft,
height: 300.0,
300.0,
// 类似于css的盒模型
decoration: BoxDecoration(
color: Colors.yellow,
border: Border.all(color: Colors.blue, 2.0), //边框
borderRadius: BorderRadius.all(
// Radius.circular(150), //圆形
Radius.circular(10), //圆角
),
),
// padding 就是 Container 的内边距,指 Container 边缘与 Child 之间的距离
// padding:EdgeInsets.all(20),
padding: EdgeInsets.fromLTRB(10, 30, 5, 0),
// margin 属性是表示 Container 与外部其他 组件的距离
margin: EdgeInsets.fromLTRB(10, 30, 5, 0),
// 让 Container 容易进行一些旋转之类的
// transform: Matrix4.translationValues(100, 0, 0)
transform: Matrix4.rotationZ(0.3)
// transform: Matrix4.diagonal3Values(1.2, 1, 1)
),
);
}
}
五、Image组件
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
// 加载本地文件
child: Image.asset(
'images/p2620309098.jpg',
// fit 属性用来控制图片的拉伸和挤压,这都是根据父容器来 的。
// BoxFit.fill:全图显示,图片会被拉伸,并充满父容器。
// BoxFit.contain:全图显示,显示原比例,可能会有空隙。
// BoxFit.cover:显示可能拉伸,可能裁切,充满(图片要 充满整个容器,还不变形)。
fit: BoxFit.cover,
// 设置图片的背景颜色,通常和 colorBlendMode 配合一起 使用,
// 这样可以是图片颜色和背景色混合。
// 上面的图片就 是进行了颜色的混合,绿色背景和图片红色的混合
color: Colors.red,
colorBlendMode: BlendMode.colorDodge,
),
height: 400,
400,
decoration: BoxDecoration(color: Colors.yellow),
));
}
}
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
//如果 child 为正方形时剪裁之后是圆形,如果 child 为矩形时,剪裁之后为椭圆形。
child: ClipOval(
child: Container(
// 加载网络文件
child: Image.network(
'https://img1.doubanio.com/view/photo/l/public/p2578828978.webp',
// fit 属性用来控制图片的拉伸和挤压,这都是根据父容器来 的。
// BoxFit.fill:全图显示,图片会被拉伸,并充满父容器。
// BoxFit.contain:全图显示,显示原比例,可能会有空隙。
// BoxFit.cover:显示可能拉伸,可能裁切,充满(图片要 充满整个容器,还不变形)。
fit: BoxFit.cover,
// 设置图片的背景颜色,通常和 colorBlendMode 配合一起 使用,
// 这样可以是图片颜色和背景色混合。
// 上面的图片就 是进行了颜色的混合,绿色背景和图片红色的混合
color: Colors.red,
colorBlendMode: BlendMode.colorDodge,
),
height: 400,
400,
decoration: BoxDecoration(color: Colors.yellow),
),
),
);
}
}
六、ListView列表组件
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10),
children: <Widget>[
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img1.doubanio.com/view/photo/m/public/p2620309098.webp"),
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img1.doubanio.com/view/photo/m/public/p2578828978.webp"),
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img1.doubanio.com/view/photo/m/public/p2621748239.webp"),
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img9.doubanio.com/view/photo/m/public/p2627557925.webp"),
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img9.doubanio.com/view/photo/m/public/p2624006816.webp"),
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Container(
child: Text(
'曼达洛人二',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28,
),
),
height: 60,
padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
),
Image.network(
"https://img2.doubanio.com/view/photo/m/public/p2627320552.webp"),
],
);
}
}
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
height: 180,
padding: EdgeInsets.fromLTRB(5, 0, 5, 0),
child: ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
Container(
250.0,
color: Colors.red,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼达洛人')
],
),
),
Container(
250.0,
color: Colors.orange,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼达洛人')
],
),
),
Container(
250.0,
color: Colors.blue,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼达洛人')
],
),
),
Container(
250.0,
color: Colors.deepOrange,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼达洛人')
],
),
),
Container(
250.0,
color: Colors.deepPurpleAccent,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼达洛人')
],
),
),
],
),
);
}
}
七、动态ListView组件
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
List httpList = [
'https://img2.doubanio.com/view/photo/m/public/p2622724983.webp',
'https://img2.doubanio.com/view/photo/m/public/p2622724983.webp',
'https://img2.doubanio.com/view/photo/m/public/p2622724983.webp',
'https://img2.doubanio.com/view/photo/m/public/p2622724983.webp'
];
//自定义方法
List<Widget> _getData() {
List<Widget> list = new List();
httpList.forEach((http) {
list.add(Container(
height: 300,
child: Image.network("$http"),
));
});
return list;
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getData(),
);
}
}
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
List listData = [
{
"title": '曼达洛人第1集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第2集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第3集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第4集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第5集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第6集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
];
//自定义方法
List<Widget> _getListData() {
var tempList = listData.map((value) {
return Container(
// 分割线
decoration: BoxDecoration(
color: Colors.white,
border:
Border(bottom: BorderSide( 1, color: Colors.black12))),
child: ListTile(
leading:
CircleAvatar(backgroundImage: NetworkImage(value["imageUrl"])),
title: Text(value["title"]),
subtitle: Text(value["type"])),
);
});
return tempList.toList();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getListData(),
);
}
}
八、GridView组件(网格视图)
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
List listData = [
{
"title": '曼达洛人第1集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第2集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第3集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第4集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第5集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
{
"title": '曼达洛人第6集',
"type": '科幻',
"imageUrl":
'https://img1.doubanio.com/view/photo/m/public/p2578828978.webp',
},
];
List<Widget> _getListData() {
var tempList = listData.map((value) {
return Container(
child: Column(
children: <Widget>[
Image.network(value['imageUrl']),
SizedBox(height: 10),
Text(
value['title'],
textAlign: TextAlign.center,
style: TextStyle(fontSize: 18),
)
],
),
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(const Radius.circular(8.0)), //外圆角
border: Border.all(
color: Color.fromRGBO(111, 111, 111, 0.9), 2)),
// height: 400, //设置高度没有反应
);
});
return tempList.toList();
}
@override
Widget build(BuildContext context) {
return GridView.count(
//水平子 Widget 之间间距
crossAxisSpacing: 10.0,
//垂直子 Widget 之间间距
mainAxisSpacing: 10.0,
//一行的 Widget 数量
padding: EdgeInsets.symmetric(horizontal:16),
crossAxisCount: 2,
//宽度和高度的比例
childAspectRatio: 0.63,
children: this._getListData(),
);
}
}