## 方法定义
~~~
返回类型 方法名(参数,,){
方法体;
return 返回值
}
~~~
~~~
void main(List args){
print(args);
}
~~~
~~~
getPerson('zhangsan', 18);
String getPerson(String name, int age){
return"name=$name, age=$age"
}
~~~
## 方法特性
Dart中一切都是对象,包括方法
1. 方法也是对象,并且有具体类型Function
2. 返回值类型,参数类型都可省略
3. 箭头语法 =>expr是{return expr;}缩写,只适用于一个表达式
4. 方法都有返回值,如果没有指定,默认return null。
## 可选参数
1. 可选命名参数:{param1, param2,...}
2. 可选位置参数:[param1, param2,...]
3. 如果存在具体参数,可选参数声明,必须在参数后面
~~~
printPerson('zhangsan');
printPerson('zhangsan',age:20);//name=zhangsan,age=20,gender=null
printPerson('zhangsan',age:20,gender:'Male');//name=zhangsan,age=20,gender=Male
printPerson(String name, {int age, String gender}){
print("name=$name,age=$age,gender=$gender");
}
~~~
//中括号根据位置而来,只能依次传入
~~~
printPerson('zhangsan',20);//name=zhangsan,age=20,gender=null
printPerson('zhangsan',20,'Male');//name=zhangsan,age=20,gender=Male
printPerson(String name, [int age, String gender]){
print("name=$name,age=$age,gender=$gender");
}
~~~
## 默认参数
1. 使用 = 在可选参数指定默认值
2. 默认值只能是编译时常量
3.
~~~
printPerson('zhangsan'); //name=zhangsan,age=100,gender=female
printPerson('zhangsan',age:20); //name=zhangsan,age=20,gender=female
printPerson('zhangsan',age:20,gender:'Male'); //name=zhangsan,age=20,gender=Male
printPerson(String name, {int age = 100, String gender = "female"}){
print("name=$name,age=$age,gender=$gender");
}
~~~
## 方法对象
1. 方法可作为对象赋值给其他变量
2. 方法可作为参数传递给其他方法
3.
~~~
void testDart(){
Function func = printHello;
func();
}
printHello(){
print('hello');
}
~~~
~~~
void testDart(){
var list2 = ['h','e','l','l','o'];
print('YYYYYYYYY');
print(listTimes(list2,times));
}
List listTimes(List list, String times(str)){
for(var index=0; index<list.length; index++){
list[index] = times(list[index]);
}
return list;
}
String times(str){
return str*3;
}
~~~
## 匿名方法
~~~
(参数1,参数2,...){
方法体...
return 返回值
}
~~~
### 特性
1. 可赋值给变量,通过变量进行调用
2. 可在其他方法中直接调用或传递给其他方法
~~~
void testDart(){
var func = (str){
print('hello $str');
};
func(30);
}
~~~
~~~
void testDart(){
((str){
print('hello $str');
})(30);
}
~~~
匿名方法作为参数
~~~
void testDart(){
var list2 = ['h','e','l','l','o'];
print('YYYYYYYYY');
print(listTimes(list2,(str){
return str *3;
}
));
}
List listTimes(List list, String times(str)){
for(var index=0; index<list.length; index++){
list[index] = times(list[index]);
}
return list;
}
~~~
~~~
void testDart(){
var list2 = ['h','e','l','l','o'];
print('YYYYYYYYY');
print(listTimes(list2));
}
List listTimes(List list){
var func1 = (str){
return str*3;
};
for(var index=0; index<list.length; index++){
list[index] = func1(list[index]);
}
return list;
}
~~~
## 闭包
1. **闭包是一个方法(对象)**
2. **闭包定义在其他方法内部**
3. **闭包能够访问外部方法内的局部变量,并持有其状态**(使用闭包最大的用处是访问外部方法的局部变量,因为方法内部的局部变量是在外部无法访问的,因此使用闭包的方式将其暴露出去,使外部可以访问)
**方法中的局部变量只能通过闭包的方式访问。**
~~~
void testDart(){
var func = a();
func(); //0
func(); //1
func(); //2
func(); //3
func(); //4
}
a(){
int count = 0;
return (){
print(count++);
};
}
~~~
- 空白目录
- Flutter入门
- 课程简介
- 开发环境搭建
- 常用组件讲解
- 案例实战
- Dart编程语言入门
- 介绍和开发准备
- 数据类型
- 运算符
- 控制流语句
- 方法
- 面向对象1
- 面向对象2
- 枚举&类型
- Flutter中文网
- Widget框架总览
- 在Flutter中构建布局
- Flutter for Web开发者
- Flutter入门实战
- flutter介绍
- Flutter目录结构,各种组件
- Container、Text
- 图片组件Image
- ListView
- 动态组件
- GridView组件
- 页面布局Padding,Row,Column,Expanded,Icon
- Stack层叠组件,Align,Positioned
- AspectRatio,Cart
- wrap组件
- 组件汇总
