一、 繼承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,
width: 300.0,
// 類似於css的盒模型
decoration: BoxDecoration(
color: Colors.yellow,
border: Border.all(color: Colors.blue, width: 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,
width: 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,
width: 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(
width: 250.0,
color: Colors.red,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼達洛人')
],
),
),
Container(
width: 250.0,
color: Colors.orange,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼達洛人')
],
),
),
Container(
width: 250.0,
color: Colors.blue,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼達洛人')
],
),
),
Container(
width: 250.0,
color: Colors.deepOrange,
child: ListView(
children: <Widget>[
Image.network(
"https://img3.doubanio.com/view/photo/m/public/p2623776231.webp"),
Text('曼達洛人')
],
),
),
Container(
width: 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(width: 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), width: 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(),
);
}
}