最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 一篇文章学习Dart,为使用Flutter打基础

    正文概述 掘金(请不要耽误我修仙)   2021-04-02   539

    安装

    Dart官网
    一篇文章学习Dart,为使用Flutter打基础

    安装brew

    Brew安装
    一篇文章学习Dart,为使用Flutter打基础

    执行代码
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    一篇文章学习Dart,为使用Flutter打基础

    使用BREW安装Dart的SDK
    $ brew tap dart-lang/dart
    $ brew install dart
    

    一篇文章学习Dart,为使用Flutter打基础
    一篇文章学习Dart,为使用Flutter打基础

    • 安装的过程如果有代理的,需要将代理关掉,不然会提示安装失败
    检测Dart是否安装成功:dart info

    一篇文章学习Dart,为使用Flutter打基础

    使用vscode编写dart文件
    • 需要安装两个插件:code runner 和 Dart

    一篇文章学习Dart,为使用Flutter打基础
    一篇文章学习Dart,为使用Flutter打基础

    认识Dart

    基本语法概述

    • 常量:和js语法一致,均是使用const,但是多了一个final进行声明,比如:const pi = 3.1415 Or final PI = 3.14
    • Dart是一种相对智能的语言,有自己的语法检测,比如定义了string类型,在后面重新赋值了int类型的情况会提示错误。
    • Dart是区分大小写的,var str 和var STR 是两个变量
    • Dart是严格使用分号的,结尾不加分号会报错
    • 和js语法基本一致,可以使用var声明,Dart会根据赋值来判断类型,但是不支持Js的let声明,也同样适应java语法,使用数据类型进行声明,比如:String str = ‘hello’ int Num = 1234等
    • Dart获取值是通过“${变量}”进行获取
    • Dart中万物皆是Object
    //自定义无参函数
    int num() {
      return 123;
    }
    //自定义必填参数函数
    String UserInfos(String name, int age) {
      return "姓名:$name 年龄:$age";
    }
    //自定义非必填参数函数  默认返回的是null 可选参数可以是多个,全部写在[]里面即可 当然也可以在参数里面直接默认赋值
    String getUserInfos(String name, [String sex]) {
      if (sex != null) return "姓名:$name 性别:$sex";
      return "姓名:$name 性别保密";
    }
    //自定义一个命名参数
    String ObjUserInfos(String name, {String sex}) {
      return "姓名:$name 性别:$sex";
    }
    //入口函数
    void main() {
      print(num());
      print(UserInfos("tom", 25));
      print(getUserInfos("tom"));
      print(ObjUserInfos("tom", sex: '男'));
    }
    

    main方法

    变量、常量

    函数

    静态
    class Info {
    String name;
    int age;
    static String sex;
    infoFun() {
    return this.name; //使用this访问的是非静态属性
    }
    
    //静态方法不可以访问非静态的属性和方法
    static String staFun() {
    return sex; //不需要this,直接使用属性,调用静态方法也是一样的,直接调用就可以
    }
    }
    
    void main() {
    var i = new Info();
    i.name;
    i.age;
    Info.sex; //静态的属性直接使用类进行访问
    }
    
    默认的get、set方法
    class Areafun {
      int height;
      int width;
      //构造函数第一种默认值的写法
      //Areafun(this.height, this.width) {}
      //构造函数第二种默认值有值的写法
      Areafun()
          : this.height = 10,
            this.width = 4 {}
      //还有一种默认的get set方法
      get areavalue {
        return this.height * this.width;
      }
    
      //默认的set方法
      set areaNewValue(int value) {
        this.height = value;
      }
    
      comArea() {
        return this.height * this.width;
      }
    }
    
    void main() {
      var area = new Areafun();
      print(area.comArea());
      print(area.areavalue); //此时不需要加小括号
      area.areaNewValue = 45;
      print(area.areavalue);
    }
    
    闭包
    void main() {
    printInfo() {
    var a = 123;
    return () {
    a++;
    print(a);
    };
    }
    
    var b = printInfo();
    b();
    b();
    b();
    }
    
    递归
    //匿名函数
    var num = (int n) {
      return n;
    };
    //递归函数
    var sum = 1;
    fn(int n) {
      sum *= n;
      if (n == 1) {
        return false;
      }
      fn(n - 1);
    }
    
    //入口函数
    void main() {
      print(num(12));
      //自执行函数
      (() {
        print('is Run');
      })();
      //调用
      fn(8);
      print(sum);
    }
    

    操作符

    class Info {
      String name;
      int age;
      Info(this.name, this.age) {}
      printInfo() {
        print("${this.name}:${this.age}");
      }
    }
    void main() {
      //常规写法
      var p = new Info('张三', 20);
      p.name = 'tom';
      p.age = 26;
      p.printInfo();
      //连缀写法
      p
        ..name = 'jim'
        ..age = 30
        ..printInfo();
    }
    

    class Person {
      String name = 'tom';
      int age = 23;
      //构造函数
      // Person() {
      //   print("我是构造函数,我被实例化的时候就会执行");
      // }
      Person(this.name, this.age) {
        print("我是构造函数,我被实例化的时候就会执行");
      }
      //命名构造函数可以第一多个
      Person.now() {
        print("我是命名构造函数,我被实例化的时候就会执行");
      }
      Person.setInfo(name, age) {
        print("我是命名构造函数,我被实例化的时候就会执行");
      }
      setInfo(int age) {
        this.age = age;
      }
    
      getInfo() {
        print('${this.name} , ${this.age}');
      }
    }
    
    封装、私有变量、公有变量以及构造函数
    //这是一个具有私有变量的类,似有变量是在前面加上下划线
    class Animal {
      String _name; //此时的name是似有变量
      int _age;
      String sex; //这个不加下划线的时候是一个共有的方法
      Animal() {
        print("我是初始化的时候就会执行的构造函数");
      }
      // 此时的getInfo的函数是一个共有的函数,可以将私有的属性return出去为共有的属性
      String getInfo() {
        return this._name;
      }
    
      //这是一个私有的函数
      void _run() {
        print('我是一个私有的函数');
      }
    
      //这是一个共有的函数,执行的是一个私有的函数
      execFun() {
        this._run();
      }
    }
    //另一个文件可以通过import进行引入
    import 'lib/Animal.dart';
    void main() {
      Animal a = new Animal();
      a.sex;
      a.execFun();
    }
    
    继承
    class Person {
      String name = 'tom';
      int age;
      String getInfo() {
        return this.name;
      }
    }
    
    //Child 继承了Person类,进而得到了Person的属性和方法,当然这是没有构造函数的情况
    class Child extends Person {}
    
    //具有构造函数的类
    class Man {
      String name;
      int age;
      String sex;
      String getInfo() {
        return this.name;
      }
    
      //构造函数
      Man(this.name, this.age) {}
    }
    
    class Boy extends Man {
      Boy(String name, int age, String sex) : super(name, age) {
        this.sex = sex;
      }
      String exec() {
        print("${this.name} --- ${this.age} --- ${this.sex}");
      }
    }
    
    //复写父类的方法
    class Animal {
      String name = 'Dog';
      void info() {
        print("${this.name}");
      }
    }
    
    class Dog extends Animal {
      String name = 'sheep';
      //重写父类的方法  这里不加@override也是可以的,一般会加上
      @override
      void info() {
        print("${this.name}");
      }
    }
    
    //子类调用父类的方法
    class Factory {
      String name = 'FAC';
      void run() {
        print('this is FAC');
      }
    }
    
    //通过super关键字调用
    class Famer extends Factory {
      void info() {
        super.run();
      }
    }
    
    void main() {
      Child c = new Child();
      print(c.name);
      Boy b = new Boy('tom', 20, '男');
      b.exec();
      Dog d = new Dog();
      d.info();
      Famer f = new Famer();
      f.info();
    }
    
    多态
    封装
    抽象类
    abstract class Animal {
      eat();
      printInfo() {
        print('我是一个普通抽象类里面的普通方法');
      }
    }
    
    class Dog extends Animal {
      @override
      eat() {
        // TODO: implement eat
        print('my name is animal');
      }
    }
    
    class Cat extends Animal {
      @override
      eat() {
        // TODO: implement eat
        throw UnimplementedError();
      }
    }
    
    void main() {
      Dog d = new Dog();
      d.eat();
      d.printInfo();
    }
    

    接口和实现

    abstract class Db {
      String uri; //数据库的链接地址
      add(); //数据库的增加方法
      del(); //数据库的删除方法
      update(); //数据库的更新方法
      search(); //数据库的查询方法
    }
    
    abstract class Language {
      String name;
    }
    
    class Mysql implements Db {
      @override
      String uri;
    
      @override
      add() {
        // TODO: implement add
        print('this is mysql');
      }
    
      @override
      del() {
        // TODO: implement del
        throw UnimplementedError();
      }
    
      @override
      search() {
        // TODO: implement search
        throw UnimplementedError();
      }
    
      @override
      update() {
        // TODO: implement update
        throw UnimplementedError();
      }
    }
    
    class Oracle implements Db {
      @override
      String uri;
    
      @override
      add() {
        // TODO: implement add
        print('this is oracle');
      }
    
      @override
      del() {
        // TODO: implement del
        throw UnimplementedError();
      }
    
      @override
      search() {
        // TODO: implement search
        throw UnimplementedError();
      }
    
      @override
      update() {
        // TODO: implement update
        throw UnimplementedError();
      }
    }
    
    //实现多个接口的时候,要同时实现里面的方法
    class Impl implements Db, Language {
      @override
      String name;
    
      @override
      String uri;
    
      @override
      add() {
        // TODO: implement add
        throw UnimplementedError();
      }
    
      @override
      del() {
        // TODO: implement del
        throw UnimplementedError();
      }
    
      @override
      search() {
        // TODO: implement search
        throw UnimplementedError();
      }
    
      @override
      update() {
        // TODO: implement update
        throw UnimplementedError();
      }
    }
    
    void main() {
      Mysql m = new Mysql();
      m.add();
      Oracle o = new Oracle();
      o.add();
    }
    

    mixins

    class A {
      printInfoA() {
        print('this is A');
      }
    }
    class B {
      printInfoB() {
        print('this is B');
      }
    }
    class D {
      D() {}
      printInfoD() {
        print('this is D');
      }
    }
    //可以实现继承和mixins同时使用
    class C extends D with A, B {}
    void main() {
      C c = new C();
      c.printInfoA();
    }
    

    泛型

    //定义一个泛型的方法
    T getData<T>(T value) {
      return value;
    }
    
    //定义一个泛型类
    class PrintClass<T> {
      List list = new List<T>();
      void add(T value) {
        this.list.add(value);
      }
    
      printInfo() {
        print(this.list);
      }
    }
    //可以动态的传入类型
    void main() {
      getData('tom');
      getData<String>('jim');
      getData<int>(12);
      //List默认的就是泛型的类
      List list = new List<String>();
      list.add('jim');
      print(list);
      List list1 = new List<int>();
      list1.add(123);
      print(list1);
    
      PrintClass p = new PrintClass();
      p.add('1234');
      p.add(123);
      p.printInfo();
    }
    

    自定义库
    系统内置的库
    实例接口:https://news-at.zhihu.com/api/3/stories/latest
    
    Pub包管理系统中的库(第三方库)
    name:'enlish',
    description:'描述信息',
    dependencies:'去地址里面的install中找安装的版本信息'
    

    结尾


    起源地下载网 » 一篇文章学习Dart,为使用Flutter打基础

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元