1.项目的创建一个flutter项目
进入Android Studio直接创建new flutter Project(如若创建时过慢也可以直接在项目目录打开命令指示符输入flutter create 项目名即可快速创建)
2.Android Studio与夜神模拟器连接
https://blog.csdn.net/weixin_42433094/article/details/113399762
3.flutter简单了解
引入import ‘package:flutter/material.dart’; flutter标准UI包
启动项目可用控制台输入flutter run启动 p显示网格(可看对齐线) o切换模式(ios和安卓切换) q关闭
4.flutter基础讲解
基础界面设置的了解
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context){
return MaterialApp(
title: "后台标题",
home: Scaffold(
appBar: AppBar(
title: Text("内部标题")
),
body: Center(
child: Text("这是一个内部的文本,主要是内部的东西,",
textAlign: TextAlign.left,//对齐方式
maxLines: 1, //最多显示行 比下面那个优先级高
overflow: TextOverflow.ellipsis,//超出一行省略号代替
style: TextStyle( //文本字体设置
fontSize: 25.0,//字体大小
color: Color.fromARGB(255, 5, 125, 125),//颜色配置
decoration: TextDecoration.underline,//下划线
decorationStyle: TextDecorationStyle.solid,//线的属性(实线,虚线等等)
),
),
),
),
);
}
}
Container容器的基础(类似于div)
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context){
return MaterialApp(
title: "后台标题",
home: Scaffold(
body: Center(
child: Container( //类似于css的div
child: new Text("Hello wwt",style: TextStyle(fontSize: 40.0)),
alignment: Alignment.topLeft ,//Container下的子内容对齐方式
width: 500.0, //Container块的宽
height: 400.0,//Container块的高
//color: Colors.lightBlue,//Container背景颜色
padding: const EdgeInsets.fromLTRB(10.0,30.0,0,0),//Container容器对里面的内边距
margin: const EdgeInsets.all(20.0),//Container容器对里面的外边距
decoration: new BoxDecoration( //Container容器装饰
gradient: const LinearGradient(//背景渐变色
colors: [Colors.lightBlue,Colors.lightGreenAccent,Colors.pinkAccent,Colors.white12]//可以一直叠加
),
border: Border.all(width: 5.0,color: Colors.red)//Container容器的边框
),
),
),
),
);
}
}
图片的插入Image
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context){
return MaterialApp(
title: "后台标题",
home: Scaffold(
body: Center(
child: Container( //类似于css的div
child: new Image.network(//网上图片
"https://i1.hdslb.com/bfs/face/5e78623de1267feccac3bf0e20303e00e91694ca.jpg@140w_140h_1c.webp",
//图片的设置;contain拉伸但不影响图片比例,fill铺满Container容器影响比例,fitWidth横向填充拉伸不影响比例但不够会被裁切,fitHeight与前面相反
//fit: BoxFit.fitHeight,
//color: Colors.lightBlueAccent,//图片颜色
//colorBlendMode: BlendMode.modulate,//颜色模式
repeat: ImageRepeat.repeat,//相对于Container容器铺满方式,
),
width: 300.0,
height: 200.0,
color: Colors.pinkAccent,
),
),
),
);
}
}
加载项目源文件的资源图片
child: new Image.asset('images/1.jpg'),
ListView列表视图
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context){
return MaterialApp(
title: "后台标题",
home: Scaffold(
appBar: new AppBar(title: new Text("ListView图标组件"),),
body: new ListView( //列表视图
/* children: <Widget>[ //列表元素,文本
new ListTile(
leading: new Icon(Icons.perm_camera_mic), //小标签
title: new Text("画虎刻鹄"), //文本
),new ListTile(
leading: new Icon(Icons.repeat),
title: new Text("有勇有谋"),
),
],*/
children: <Widget>[ //列表插入图片
new Image.asset("images/1.jpg"),
new Image.network("https://i1.hdslb.com/bfs/face/5e78623de1267feccac3bf0e20303e00e91694ca.jpg@140w_140h_1c.webp"),
new Image.asset("images/1.jpg"),
new Image.network("https://i1.hdslb.com/bfs/face/5e78623de1267feccac3bf0e20303e00e91694ca.jpg@140w_140h_1c.webp"),
],
),
),
);
}
}
ListView横向列表+分组件减少单体嵌套过多
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context){
return MaterialApp(
title: "后台标题",
home: Scaffold(
appBar: new AppBar(title: new Text("ListView图标组件"),),
body:Center(
child: Container(
height: 200.0,
child: MyList(), //分模块写
),
),
),
);
}
}
class MyList extends StatelessWidget{
@override
Widget build(BuildContext context){
return ListView(
scrollDirection: Axis.horizontal,//列表横向设置
children: <Widget>[
new Container(
width: 180.0,
color: Colors.indigoAccent,
),new Container(
width: 180.0,
color: Colors.pinkAccent,
),new Container(
width: 180.0,
color: Colors.deepOrangeAccent,
),
],
);
}
}
ListView纵向动态列表+List数组+动态列表构建(写完后需要重新运行加载数据缓存)
import 'package:flutter/material.dart';
void main() => runApp(MyApp(
items:new List<String>.generate(1000,(i)=>"列表第 $i")//自己编辑一个list
));
class MyApp extends StatelessWidget{
final List<String> items; //声明一个常量
//固定写法 传递的参数 无名无参的父类
MyApp({Key key,@required this.items}):super(key: key);
@override
Widget build(BuildContext context){
return MaterialApp(
title: "后台标题",
home: Scaffold(
appBar: new AppBar(title: new Text("ListView图标组件"),),
body:new ListView.builder( //构建动态列表
itemCount: items.length, //生成条数
itemBuilder: (context,index){ //遍历list
return new ListTile(
title: new Text("${items[index]}"),
);
},
),
),
);
}
}
GridView网格列表(图片列表)
写法一
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "后台标题",
home: Scaffold(
appBar: new AppBar(title: new Text("ListView图标组件"),),
body: GridView.count( //网格
padding: const EdgeInsets.all(20.0),//距离外部容器的边距
crossAxisCount: 3,//设置三行
crossAxisSpacing: 10.0,//每个网格的边距
children: <Widget>[
const Text("我是a"),
const Text("我是b"),
const Text("我是c"),
const Text("我是d"),
const Text("我是e"),
const Text("我是f"),
],
),
),
);
}
}
写法二
fit: BoxFit.cover填满容器裁切,图片的属性,fit可以完美配合容器进行裁切
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "后台标题",
home: Scaffold(
appBar: new AppBar(title: new Text("ListView图标组件"),),
body: GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,//一行三个
mainAxisSpacing: 2.0,//上下两行的边距
crossAxisSpacing: 2.0,//左右边距
childAspectRatio: 0.7,//图片比例 宽高比
),
children: <Widget>[
new Image.network("http://img5.mtime.cn/mt/2021/03/04/101410.25280244_1280X720X2.jpg",fit: BoxFit.cover),//fit: BoxFit.cover填满容器裁切
new Image.network("http://img5.mtime.cn/mt/2021/01/06/094232.18209247_1280X720X2.jpg",fit: BoxFit.cover),
new Image.network("http://img5.mtime.cn/mt/2021/03/04/103317.70446282_1280X720X2.jpg",fit: BoxFit.cover),
new Image.network("http://img5.mtime.cn/mt/2021/03/11/094158.30870791_1280X720X2.jpg",fit: BoxFit.cover),
new Image.network("http://img5.mtime.cn/mt/2021/02/04/143001.40483517_1280X720X2.jpg",fit: BoxFit.cover),
new Image.network("http://img5.mtime.cn/mt/2021/03/09/200645.34627873_1280X720X2.jpg",fit: BoxFit.cover),
],
),
),
);
}
}