美文网首页
Flutter常用语法糖

Flutter常用语法糖

作者: __素颜__ | 来源:发表于2023-02-09 13:52 被阅读0次

    条件成员访问 ?.

    class Person{
     String name;
      int age;
    }
     
    void main(){
      Person person;
      
      // 这里会报错,因为都初始化出  person
      print(person.age);
     
      // 这里不会报错, ?. 是先判断是否存在 person
      print(person?.name);
    }
    

    语法糖 ??

    A??B
    如果 A 等于 null,那么 A??B 为 B
    如果 A 不等于 null,那么 A??B 为 A
    
    
    

    类型转换 as 操作符

    class Person{
     String name;
      int age;
     
      void work(){
        print("working...");
      }
    }
     
    void main(){
      var person ;
      person = "";
      person = new Person();
     
      // 将变量转为 Person 对象的格式,如果 不是 Person 对象,就会报错
      (person as Person).work();
    }
    

    是否指定类型 is,is! 操作符

    class Person{
     String name;
      int age;
     
      void work(){
        print("working...");
      }
    }
     
    void main(){
      var person ;
      person = "";
      
      // 判断 person 变量是 Person 类的实例化出来的
      if (person is Person) {
      }
     
      // 判断 person 变量不是 Person 类的实例化出来的
      if (person is! Person) {
      }
    }
    

    .. 级联 操作

    void main(){
      var person = new Person();
     
      // 这段表示给 age 和 name 赋值,然后调用 work 方法
      person..age=10
            ..name="Tommi"
            ..work();
     
      // 也可以这样子写,匿名类的方式
      new Person()
            ..age=10
            ..name="Tommi"
            ..work();
    }
    

    对象中的 call 方法

    当我们声明一个类的时候,如果给这个类指定一个 call 方法,就可以直接使用类名作为方法名来调用 call 方法了。

    class Person {
      String name;
      int age;
     
      call() {
        print("call object");
      }
    }
     
    void main() {
      Person person = new Person();
      person(); // call object
    }
    

    Extension 方法

    和kotlin的扩展函数一样,扩展已有的类,方便使用

    extension NumberParsing on String {
      int parseInt() {
        return int.parse(this);
      }
      // ···
    }
    
    
    print('42'.parseInt()); // Use an extension method.
    
    

    for 语法糖

    class _HomePageState extends State<HomePage> {
      String text;
    
      @override
      Widget build(BuildContext context) {
        return Column(
          children: <Widget>[
            if (text != null) Text(text) else Text("空的"),
            if (text != null) Text(text),
          ],
        );
      }
    }
    
    
    

    if 语法糖

    flutter 中可能会这样的情况: 如果条件是假,则不显示某个 Widget

    class _HomePageState extends State<HomePage> {
      String text;
    
      @override
      Widget build(BuildContext context) {
        return Column(
          children: <Widget>[
            if (text != null) Text(text) else Text("空的"),
            if (text != null) Text(text),
          ],
        );
      }
    }
    
    
    

    …语法

    展开

    void list3Point() {
      var list1 = <int>[1, 2, 3, 4];
    
      var list2 = <int>[
        0,
        ...list1,
        6,
      ];
    
      print(list2); // [0, 1, 2, 3, 4, 6]
    }
    
    
    

    空安全修饰符

    空安全是在Dart 2.12中引入的,如果开启空安全,默认情况下代码中的类型不能为空,也就是说除非声明该类型是可以为空的,否则值不能为空。

    空安全在Dart 2.12 和 Flutter 2.0中可用,可通过指定Dart SDK版本为2.12那么就会开启空安全

    environment:
      sdk: ">=2.12.0 <3.0.0"
    

    将类型分为了非空类型和可空类型

    String  a;//a为非空类型,默认非空
    String?  a;//a为可空类型
    
    
    

    !修饰符

    空断言:表示确保该表达式不会为空,如果为空会报错,引起空指针异常;
    一个作为后缀的感叹号标记 (!) 会让左侧的表达式转换成其对应的非空类型
    

    late

    由于在空安全中声明的变量默认是非空类型,所以必须赋初始值。但如果不想这么早赋初始值,可以用late(必须确保在使用前赋值,否则会报错)

    late String description;
    
    
    

    想给一个非空变量赋值 null 要如何处理?

    只需在类型后面添加 ?

    String? name = null;
    print('name length:${name?.length}');
    
    
    

    还可以使用操作符 !

    String? name = null;
    print('name length:${name!.length}');
    
    
    
    

    还可构造出类型提升,使该变量类型提升为非空类型

    int getLength(String? str) {
      // 此处报错,因为 str 可能为空
      return str.length;
    }
    
    
    //这个例子中,因为 str 可能为空,所以使用 str.length 会提示错误,通过类型提升我们可以这样修改:
    
    int getLength(String? str) {
      // 判断 str 为空的场景 str 提升为非空类型
      if (str == null) return 0;
      return str.length;
    }
    
    
    

    相关文章

      网友评论

          本文标题:Flutter常用语法糖

          本文链接:https://www.haomeiwen.com/subject/wcgckdtx.html