一、Dart语法
dart语法较为简单,学过python和c++后发现大同小异。不过多介绍
1.函数
//调用方法传参
main() {
//1、定义一个方法 求1到这个数的所有数的和 60 1+2+3+。。。+60
/*
int sumNum(int n){
var sum=0;
for(var i=1;i<=n;i++)
{
sum+=i;
}
return sum;
}
var n1=sumNum(5);
print(n1);
var n2=sumNum(100);
print(n2);
*/
//2、定义一个方法然后打印用户信息
// String printUserInfo(String username, int age) {
// //行参
// return "姓名:$username---年龄:$age";
// }
// print(printUserInfo('张三', 20)); //实参
//3、定义一个带可选参数的方法 ,最新的dart定义可选参数需要指定类型默认值
// String printUserInfo(String username,[int age=0]){ //行参
// if(age!=0){
// return "姓名:$username---年龄:$age";
// }
// return "姓名:$username---年龄保密";
// }
// print(printUserInfo('张三',21)); //实参
// print(printUserInfo('张三'));
//4、定义一个带默认参数的方法
// String printUserInfo(String username,[String sex='男',int age=0]){ //行参
// if(age!=0){
// return "姓名:$username---性别:$sex--年龄:$age";
// }
// return "姓名:$username---性别:$sex--年龄保密";
// }
// print(printUserInfo('张三'));
// print(printUserInfo('小李','女'));
// print(printUserInfo('小李','女',30));
//5、定义一个命名参数的方法,最新的dart定义命名参数需要指定类型默认值
// String printUserInfo(String username, {int age = 0, String sex = '男'}) {//行参
// if (age != 0) {
// return "姓名:$username---性别:$sex--年龄:$age";
// }
// return "姓名:$username---性别:$sex--年龄保密";
// }
// print(printUserInfo('张三', age: 20, sex: '未知'));
//6、实现一个 把方法当做参数的方法
// var fn=(){
// print('我是一个匿名方法');
// };
// fn();
//方法
fn1() {
print('fn1');
}
//方法
fn2(fn) {
fn();
}
//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);
}
可以类比*args, **kwargs,与之不同的是dart中,*args **kwargs不能同时存在
void main() {
/*需求:使用forEach打印下面List里面的数据*/
// List list=['苹果','香蕉','西瓜'];
// list.forEach((value){
// print(value);
// });
// list.forEach((value)=>print(value));
//注意和方法的区别: 箭头函数内只能写一条语句,并且语句后面没有分号(;)
// list.forEach((value)=>{
// print(value)
// });
/*需求:修改下面List里面的数据,让数组中大于2的值乘以2*/
// List list=[4,1,2,3,4];
// var newList=list.map((value){
// if(value>2){
// return value*2;
// }
// return value;
// });
// print(newList.toList());
// var newList=list.map((value)=>value>2?value*2:value);
// print(newList.toList());
/*
需求: 1、定义一个方法isEvenNumber来判断一个数是否是偶数
2、定义一个方法打印1-n以内的所有偶数
*/
// 1、定义一个方法isEvenNumber来判断一个数是否是偶数
bool isEvenNumber(int n) {
if (n % 2 == 0) {
return true;
}
return false;
}
// 2、定义一个方法打印1-n以内的所有偶数
printNum(int n) {
for (var i = 1; i <= n; i++) {
if (isEvenNumber(i)) {
print(i);
}
}
}
printNum(10);
}
int getNum(int n) {
return n;
}
void main() {
// print(getNum(12));
//匿名方法
// var printNum=(){
// print(123);
// };
// printNum();
// var printNum=(int n){
// print(n+2);
// };
// printNum(12);
//自执行方法
// ((int n){
// print(n);
// print('我是自执行方法');
// })(12);
//方法的递归
// var sum = 1;
// fn(int n) {
// sum *= n;
// if (n == 1) {
// return;
// }
// fn(n - 1);
// }
// fn(5);
// print(sum);
//通过方法的递归 求1-100的和
var sum=0;
fn(int n){
sum+=n;
if(n==0){
return;
}
fn(n-1);
}
fn(100);
print(sum);
}
/*
闭包:
1、全局变量特点: 全局变量常驻内存、全局变量污染全局
2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
/* 想实现的功能:
1.常驻内存
2.不污染全局
产生了闭包,闭包可以解决这个问题.....
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
*/
*/
/*全局变量*/
var a = 123;
void main() {
// print(a);
// fn(){
// a++;
// print(a);
// }
// fn();
// fn();
// fn();
//局部变量
// printInfo() {
// var myNum = 123;
// myNum++;
// print(myNum);
// }
// printInfo();
// printInfo();
// printInfo();
//闭包
fn() {
var a = 123; /*不会污染全局 常驻内存*/
return () {
a++;
print(a);
};
}
var b = fn();
b();
b();
b();
}
二、创建项目
1.vscode
(1)安装flutter插件,之后配置flutterSDK路径和dart路径,分别为 flutter目录\bin flutter目录\bin\cached\dart-sdk
(2)输入》flutter new project
2.目录结构
3.入口文件:main.dart
1.入口
程序从main启动,runApp里面放一个顶级控件,就可以显示该控件
如以上代码,创建了一个居中显示的文字。
如果你想知道空间都有哪些属性,可以按下ctrl然后点击这个控件,跳转到源代码仔细阅读。
2.装饰
scaffold 脚手架 建筑架;
我们一般把material App作为根组件,像这样: