zoukankan      html  css  js  c++  java
  • 从零学习Flutter(一):初识Dart

    Fluter是Google推出的跨平台开发App的一套框架,很多人都说,Google出品比属于金品,故,我也来凑凑热闹,Fluter是用Dart写的,所以在用Fluter之前,我们还是有必要简单了解一下Fluter的。之前的一直使用Facebook推出的RN框架写App,感觉RN的hot reload 做的不是那么完美,今年试了一下fluter,感觉他的hot reload比RN的好多了,另外,Fluter用dart写,dart算是强类型吧,比es6要爽的多,代码容错率大大提高。

    废话不多说,简单介绍一下。

    class Bicycle {
      int cadence;
      int speed;
      int gear;
      int _speed=0;
      
      Bicycle(this.cadence, this.gear);
      //Bicycle(this.cadence, this.speed, this.gear);
      int get Speed=>_speed;
      @override
        String toString() => 'Bicycle: $Speed mph';
      
      void applyBrake(int decrement) {
          _speed -= decrement;
        }
    
        void speedUp(int increment) {
          _speed += increment;
        }
    }
    
    void main() {
      var bike =new Bicycle(23,2); //new Bicycle(2, 3, 1);
      print(bike);
      print(bike.cadence);
      bike.applyBrake(2);
      print(bike.Speed);
    }

    上面这段代码

    1.定义一个class,class不用声明public,因为默认就是public,特别注意:在 Dart 中没有诸如 public、private、protected 这样的关键词

    2.申明变量,变量默认是public,eg:int cadence;如果要申明私有变量,在变量前加一个下划线即可,eg:int _cadence;所有未初始化的变量,值都为null,无论int,stringdart中没有属性一说,申明的变量就自带get,set访问器,默认情况下,Dart 会为所有公开的变量提供存取方法,除非你需要提供仅仅可读、可写,或者在某些情况下需要在 getter 方法中进行计算或是在 setter 方法中进行某些值得更新,否则都不需要再重新定义存取方法,如果想定义一个变量为只读,可以这样,eg:int get Speed=>_speed;如果想定义一个变量为可写,可以这样,eg:int set Speed=>_speed;特别注意:在 Dart 中没有诸如 public、private、protected 这样的关键词

    3.所有的 Dart 类中都有一个 toString() 方法,你可以复写这个方法来提供更具体的输出信息,修饰符 @override 会告诉分析器你当前是在复写某个成员方法,如果该复写不成功,分析器就会报错,eg:

    @override

    String toString() => 'Bicycle: $Speed mph';

    4.说到这里,提一下dart里的字符串模板,可以在字符串内使用 ${expression} 的方式来实现字符串模板的效果,如果该表达式仅仅是一个标识符,还可以去掉花括号 $variableName

    例子如上

    5.针对只有一行的方法可以使用 => 来简化方法的书写,=>既可以叫:箭头函数也可以叫Lamada表达式,例子如上

    6.再说一下dart 类中的构造函数,dart中构造函数不可以向C#/java里那样直接重载,在构造函数的参数中使用 this 可以直接对实例变量进行赋值,不用再编写多余的代码

    eg:下面这两段代码是相同功效的

    class Bicycle {
      int cadence;
      int speed;
      int gear;
      //1.
      Bicycle(this.cadence, this.speed, this.gear);

    }

    class Bicycle {
      int cadence;
      int speed;
      int gear;
      
    //2.
    Bicycle(int cadence, int speed, int gear) {
      this.cadence = cadence;
      this.speed = speed;
      this.gear = gear;
    }
    }
    Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
    7.dart中的main方法,main() 方法是 Dart 的主方法,如果你需要访问命令行传递过来的参数,可以使用 main(List<String> args方法,main() 方法存在于最外层的作用域,
    在 Dart 中你可以在类之外编写代码,变量、方法、存取方法都可以独立于类之外维持生命周期

    8.dart2中,方法中调用另一个类中的方法,new 变成可选的,在 Dart 2 中,new 关键字变成了可选的,如果你确信某个变量的值不会再发生改变,你可以使用 final 来代替 var

    9.Dart 语言并没有提供 interface 关键字,但是每一个类都隐式地定义了一个接口

    10.dart中的函数编程
    String scream(int length) => "A${'a' * length}h!";
    
    main() {
      final values = [1, 2, 3, 5, 10, 50];
      for (var length in values) {
        print(scream(length));
      }
    }
    //output
    Aah!
    Aaah!
    Aaaah!
    Aaaaaah!
    Aaaaaaaaaaah!
    Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!
    效果等同于:
    将上述代码中的 main() 方法中的 for() {...} 替换为下面的一行代码,它直接使用了链式调用的方式:
    values.map(scream).forEach(print);

    参考文献:https://codelabs.flutter-io.cn/codelabs/from-java-to-dart-cn/index.html#5

    dart官网:https://www.dartlang.org/

     
    
    
    
  • 相关阅读:
    TreeView使用集锦
    net 下安装、调试的常见问题与错误及解决方法 [转]
    Oracle中使用同义词
    再推荐两个blog和一首好歌
    一点感慨
    推荐一个blog和一个工具
    买书了
    第一次做饭
    ORA00911错误及解决方法
    C#3.0美文收集
  • 原文地址:https://www.cnblogs.com/gdsblog/p/10071785.html
Copyright © 2011-2022 走看看