Flutter实例解析

Point(num x, num y) {
    // There's a better way to do this, stay tuned.
    this.x = x;
    this.y = y;
 }

语法糖:

Point(this.x, this.y);

同理:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
 
  final String title;

  @override
  // _MyHomePageState类是MyHomePage类对应的状态类
  _MyHomePageState createState() => _MyHomePageState();
}
MyHomePage({Key key, this.title}) : super(key: key);

前半句是一个语法糖:

MyHomePage({Key key, this.title})

原本应该类似包含:

MyHomePage({Key key, String title}) {
    this.title = title;
}

调用超类构造函数:

: super(key: key)

实际这个构造方法很长。

附注:

可选参数也分为两类:

  • 可选命名参数:使用 {} 包起来的参数是可选命名参数
    ** 可选命名参数:{} 使用 {} 来赋值的数据类型是 Map,所以可选的命名参数的类型也是 Map, 因此调用函数时,可选参数的赋值必须是 paramName: value 这种 key: value 格式的,例如:
// 声明和实现
bool say(String msg , {String from, int clock}){
    print(msg+" from " + from + " at " + clock.toString());
    return true;
}
// 调用
say('Hello Flutter',clock: 11);
say('Hello Flutter',from: 'XiaoMing',clock: 11);
  • 可选位置参数:使用 [] 包起来的参数是可选位置参数
    ** 用 [] 包起来的参数是可选位置参数,前面讲数据类型的时候,使用 [] 来赋值的数据类型是 List,所以可选的命名参数的类型也是 List,所以赋值和参数是一一对应的,下面是可选位置参数的例子:
// 声明和实现
bool say(String msg , [String from , int clock]){
    print(msg+" from " + from + " at " + clock.toString());
    return true;
}
// 调用
say('Hello Flutter','XiaoMing')//✅
say('Hello Flutter',1)//❌ 因为  1 赋值给了 from,但是 from 是String,所以会报错

推荐阅读:

【开发经验】Flutter避免代码嵌套,写好build方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容