美文网首页
Flutter-Dart 语言基础

Flutter-Dart 语言基础

作者: 無名小子的杂货铺 | 来源:发表于2019-11-19 00:05 被阅读0次

    如果你有其他编程语言经验,特别是 Java 和 JavaScript,会很容易上手 Dart, 基本上看一个遍介绍就能掌握了。文章的最后有下面demo 实例 github 链接

    Dart 概况

    在上一篇中已经讲过了 Dart 语言的来历和一些语言特性等优点,这里就不再重复赘述了,可以上看上一篇文章介绍。

    类似 JavaScript,Dart 是一种面向对象语言,但是它采用类别基础编程。它只允许单一继承,语法风格接近C语言。

    Dart 的方法也是对象并且具有一种类型 Function,这意味着方法可以赋值给变量,也可以当做其他方法的参数,也可以把 Dart 类的实例当做方法来调用。

    在 Dart 语言中中所有能够使用变量引用的都是对象, 每个对象都是一个类的实例。甚至连数字、方法和 null 都是对象,所有的对象都继承于 Object 类。

    Dart 是一个强类型语言,任何变量都是有确定类型。

    变量声明

    1、Object

    Object 是Dart所有对象的根基类,包括Function和Null,所以任何类型的数据都可以赋值给Object声明的对象,声明的变量可以在后期改变赋值类型

       /// 定一个 Object 变量
      Object myObject;
      myObject = 'dart is good';//赋值string类型
      myObject = 998;//又重新赋值num
      print(myObject);
    
      /// 定一个 dynamic 类型 变量
      dynamic myDynamic;
      myDynamic = "dart is good";
      myDynamic = 999;//又重新赋值num 不会报错
      print(myDynamic);
    
      ///dynamic与Object不同:dynamic声明的对象编译器会提供所有可能的组合,
      ///而Object声明的对象只能使用Object的属性与方法, 否则编译器会报错
    

    2、var

    一种不指定类型声明变量的方式,但是只要变量被赋值,类型便会确定,则不能再改变其类型

    //定义一个变量
      var number = 10;
    //  number = 'start';//会报错,因为已经 number = 10 赋值,number 类型就确定了
    

    3、final and const

    如果你以后不打算修改一个变量,使用 final 或者 const。 一个 final 变量只能赋值一次;一个 const 变量是编译时常量。 (Const 变量同时也是 final 变量。) 顶级的 final 变量或者类中的 final 变量在 第一次使用的时候初始化。

      //不打算修改一个变量, 一个 final 变量只能赋值一次
      final name2 = 'Bob';
      // name2 = "bbb";//这里在进行赋值操作会报错
    
      var foo = const [];
      final bar = const [];
      const baz = const [];
    
      foo = [];//可以改变value
    //  bar = [];//不能改变使用 final 标示的变量
    //  baz = [];//不能改变使用 const 标示的变量
    
    

    4、内置的类型

    这里直接看代码好了

      //int 和 double 都是 num 的子类
      int x = 1;
      double y = 1.0;
    
      var x1 = 1;
      var y2 = 1.0;
    
      // String -> int
      var one = int.parse('1');
      print("String -> int:$one");
    
      // int -> String
      String oneAsString = 1.toString();
      print("int -> String:$oneAsString");
    
      ///可以使用单引号或者双引号来创建字符串
      var s1 = '单引号string';
      var s2 = "双引号string";
      print(s1);
      print(s2);
    
      ///使用三个单引号或者双引号也可以 创建多行字符串对象
      var s3 = '''
      第一行
      第二行
      第三行
    ''';
      print(s3);
    
      var count;
      print('Hello, World!');
      print(count);
      printNumber(number);
    
      ///定义一个有序list
      var list = [1, 2, 3];
      list.forEach(printElement);
    
      /// 定义一个不变的list
      var constantList = const [1, 2, 3];
    
      /// 创建一个map
      var gifts = {
    // Keys      Values
        'first' : 'partridge',
        'second': 'turtledoves',
        'fifth' : 'golden rings'
      };
    
      ///同样创建一个map
      var gifts2 = new Map();
      gifts2['first'] = 'partridge';
      gifts2['second'] = 'turtledoves';
      gifts2['fifth'] = 'golden rings';
      print(gifts2);
    
      /// 创建 一个bool 类型变量
      var isGood = true;
      print(isGood is bool);
    
    // 定义个方法。
    printNumber(num aNumber) {
      print('The number is $aNumber.'); // 在控制台打印内容。
    }
    
    printElement(element) {
      print(element);
    }
    
      ///List 和 Set 等实现了 Iterable 接口的类还支持 for-in 形式的 遍历
      var collection = [0, 1, 2];
      for (var x in collection) {
        print(x);
      }
    
    /// 可选命名参数,你可以使用这种形式 paramName: value 来指定命名参数
      sayHello(name: "dart",talk: "hello");
      sayHello(name: "dart");
    

    操作符

    大部分操作符含义都是一样的,这里介绍几个 dart 特有的

    1、??

    b ??= value; // 如果 b 是 null,则赋值给 b;
                 // 如果不是 null,则 b 的值保持不变
    

    2、?

    条件成员访问 和 . 类似,但是左边的操作对象不能为 null,例如 foo?.bar 如果 foo 为 null 则返回 null,否则返回 bar 成员

    异步

    Dart 有一些语言特性来支持 异步编程。 最常见的特性是 async 方法和 await 表达式。

    Dart 库中有很多返回 Future 或者 Stream 对象的方法。 这些方法是 异步的: 这些函数在设置完基本的操作 后就返回了, 而无需等待操作执行完成。 例如读取一个文件,在打开文件后就返回了。

    有两种方式可以使用 Future 对象中的 数据:

    • 使用 asyncawait
    • 使用 Future API

    同样,从 Stream 中获取数据也有两种 方式:

    • 使用 async 和一个 异步 for 循环 (await for)
    • 使用 Stream API

    要使用 await,其方法必须带有 async 关键字

    lookUpVersion(){
    }
    
    checkVersion() async {
      var version = await lookUpVersion();
    }
    
    /// 假设getName 是异步操作
    String getName(String name){
      return 'dart$name';
    }
    
    void sayDart() async {
      try{
        String name1 = await getName("1");
        String name2 = await getName(name1);
        print(name1+name2);
        //执行接下来的操作
      } catch(e){
        //错误处理
        print(e);
      }
    }
    

    Future.then:

      /// Future.delayed 创建了一个延时任务
      Future.delayed(new Duration(seconds: 5),(){
        return "Hello, World!";
      }).then((data){
        print(data);
      });
    

    Future.wait:

    处理多个异步任务

      /// Future.wait 执行多个异步任务
      Future.wait([
        Future.delayed(new Duration(seconds: 1), () {
          return "Hello, World 1!";
        }),
        Future.delayed(new Duration(seconds: 2), () {
          return "Hello, World 2!";
        })
      ]).then((results){
        print(results);
      }).catchError((e){
        print(e);
      });
    

    总结

    通过上面的基本介绍和代码解释,对 Dart 的基本语法和类型系统有了一个初步的了解,也知道编写的规则了。就像在开头说的如果你已经又其他编程语言的基础,上手 Dart 语言应该非常容易 。

    像 if-else、for循环、while、do-while、break、continue、switch-case 等流程控制语法和其他编程语言大同小异,这里就不做一一介绍了。

    更多的 Dart 语言特性需要你在后续的使用过程中慢慢学习。我们可以参考官方文档https://api.dartlang.org/stable/2.2.0/index.html

    代码实例

    已传置 github flutter-free

    参考学习

    http://dart.goodev.org/guides/get-started 很好的对比学习网站

    相关文章

      网友评论

          本文标题:Flutter-Dart 语言基础

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