Flutter学习笔记01: Flutter环境配置与Dart

2022-05-11  本文已影响0人  追梦小乐

1、开发准备

1.1 Dart 中文官网

https://dart.cn/

1.2 Win10下环境搭建

1.2.1 如果安装了Flutter-SDK,其实也可以直接使用里面的dart - sdk

image.png image.png

1.2.2 如果之前没有安装 Flutter-SDK,请看如下步骤(在线方式)

安装 包管理器 chocolatey
image.png

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

image.png
choco -v

image.png
安装 dart-sdk
choco install dart-sdk

choco upgrade dart-sdk

1.2.3 离线方式安装,直接下载压缩包

1.3 开发工具选择

1.4 插件的安装

在线方式

image.png
image.png
image.png

离线方式

https://plugins.jetbrains.com/plugin/6351-dart/versions

image.png

1.5 项目创建

image.png image.png image.png image.png

2、数据类型

2.1 变量与常量

变量

image.png

常量

image.png

2.2 内置类型

2.2.1 数值型-Number

image.png
数值型操作
image.png image.png
image.png

2.2.2 字符串-String

字符串创建
image.png

2.2.3 布尔型-Boolean

image.png

2.2.4 列表-List

创建
image.png image.png
常用操作
    var list = ["hello","dart"];
    print(list.length);

    list.add("java");
    print(list);

    list.remove("java");
    print(list);

    print(list.indexOf("dart"));
    print(list.indexOf("java"));

    list.insert(0, "2020");
    print(list);

    print(list.sublist(1));

    print(list.reversed);

    list.sort();
    print(list);

    list.clear();
    print(list);

2
[hello, dart, java]
[hello, dart]
1
-1
[2020, hello, dart]
[hello, dart]
(dart, hello, 2020)
[2020, dart, hello]
[]

2.2.5 键值对-Map

  1. 创建Map
var language = {"first":"Dart", "second" : "java"};

  1. 创建不可变Map
var language = const {"first":"Dart", "second" : "java"};

  1. 构造创建
var language = new Map();

1)Map.length

2)Map.isEmpty()、Map.isNotEmpty()

3)Map.Keys、 Map.values

4)Map.containsKey()、Map.containsValue()

5)Map.remove()

6)Map.forEach()

2.2.6 Runes、Symbols

image.png

3、运算符

3.1 算术运算符

3.2 关系运算符

3.3 逻辑运算符

3.4 赋值运算符

3.5 条件表达式

4、控制语句

4.1 if语句

4.2 for语句

4.3 while语句

4.4 break 和 continue语句

4.5 switch...case语句

image.png

5、方法

5.1 方法的定义

返回类型  方法名 (参数1,参数2...){
    方法体

    return 返回值
}
image.png

5.2 可选参数

5.3 默认参数值

5.4 方法对象

5.5 匿名方法

(参数1. 参数2, ...) {

    方法体

    return 返回值

}

5.6 闭包

void main(){

    var func = a();
    func();
    func();
    func();

}

a(){
  int count = 0;

  //闭包
//  printCount(){
//    print(count++);
//  }
//  return printCount;

  // 更多是使用匿名方式的闭包
  return (){
    print(count++);
  };
}

6、Dart 面向对象编程

6.1 类与对象

void main(){
  
  var person = new Person();
  
}

class Person{
  int age;
  String name;
  
}



void main(){
  var person = new Person();
  person.name = "追梦小乐";
  person.age = 20;
  print(person.name);
  print(person.age);
  person.work();
  print(person.address);
}

class Person{
  int age;
  String name;
  final String address = "";
  void work(){
    print("姓名:$name  年龄:$age , is working.......");
  }

}

6.2 计算属性



void main(){
  var rect = new Rectangle();
  rect.width = 10;
  rect.height = 20;
  print(rect.area);

  rect.area = 200;
  print(rect.width);
}

class Rectangle {

  num width,height;

  //计算属性
//  num get area {
//    return width * height;
//  }

    //计算属性简写模式
    num get area => width * height;

    set area(value){
      width = value / 10;
    }
}

6.3 构造方法


void main(){
  
}

class Person{
  int age;
  String name;
  final String gender = null;
  
  Person(){
    
  }
  
  void work(){
    print("working =============");
  }
}


void main(){
  Person person = new Person(20, "追梦小乐", "女");
}

class Person{
  int age;
  String name;
  final String gender;
  
  //语法糖形式
  Person(this.age,this.name,this.gender);
  
    // 一般形式,虽说跟语法糖形式作用一样,但是有个区别,就是final修饰的变量,在这里是不能被赋值的
//  Person(int age,String name,String gender){
//    this.age = age;
//    this.name = name;
//    this.gender = gender;
//  }
  
  void work(){
    print("working ===============");
  }
}


void main(){
  Person person = new Person(20, "追梦小乐", "女");
  new Person.withName("风行者", "男");
  new Person.withAge(20, "男");
}

class Person{
  int age;
  String name;
  final String gender;

  //语法糖形式
  Person(this.age,this.name,this.gender);

  Person.withName(String name, this.gender){
    this.name = name;
  }

  Person.withAge(int age, this.gender){
    this.age = age;
  }

  void work(){
    print("working ===============");
  }
}

6.4 常量构造方法

image.png

void main(){
  const person = const Person(20, "追梦小乐", "女");
  person.work();
}

class Person{
  final int age;
  final String name;
  final String gender;

  //语法糖形式
  const Person(this.age,this.name,this.gender);

  void work(){
    print("working ===============");
  }
}

6.5 工厂构造方法

image.png

class Logger{

  final String name;

  static final Map<String,Logger> _cache = <String,Logger>{};

  factory Logger(String name){
    return Logger._internal("dart");
  }

  Logger._internal(this.name);

  void log(String msg){
    print(msg);
  }

}

6.6 初始化列表

image.png

void main(){
  var person = Person(20, "追梦小乐", "女");
  person.work();
}

class Person{
  int age;
  String name;
  final String gender;

  //语法糖形式
  Person(this.age,this.name,this.gender);

  Person.withName(Map map) : gender = map["gender"]{
    this.name = map["name"];
    this.age = map["age"];
  }

  void work(){
    print("working ===============");
  }
}

6.7 静态成员

image.png

void main(){
  var page = new Page();
  page.scrollUp();
  Page.scrollDown();
}

class Page{

  static const int maxPage = 10;

  static int currentPage = 1;

  static void scrollDown(){
    currentPage = 1;
    print("scrollDown======");
  }

  void scrollUp(){
    currentPage++;
    print("scrollUp======");
  }
}

6.8 对象操作符


void main(){
  Person person;
  person ?.work();
}

class Person{
  String name;
  int age;
  
  void work(){
    print("Work......");
  }
}


void main(){
  var person;
  person = "";
  person = new Person();
  (person as Person).work();
}

class Person{
  String name;
  int age;

  void work(){
    print("Work......");
  }
}


void main(){
  var person;
  person = "";
  if(person is Person){
    person.work();
  }
}

class Person{
  String name;
  int age;

  void work(){
    print("Work......");
  }
}


void main(){
  Person person = new Person();
  person..name = "追梦小乐"
        ..age = 20
        ..work();
}

class Person{
  String name;
  int age;

  void work(){
    print("Work......");
  }
}

6.9 对象call方法

image.png

void main(){
  var person = new Person();
  person.call("追梦小乐", 20);
}

class Person{
  String name;
  int age;
  
  //返回值可以有,也可以为空,可以有参也可以无参
  String call(String name,int age){
    return "name is $name, age is $age";
  }
  
}

你是怎样理解父类继承,接口实现和混入的?我们应该在什么场景下使用它们?

1.一般来讲,单继承,多实现,混入是多继承
A.继承是子类需要复用父类的方法实现
B.实现接口是复用接口的参数,返回值,和方法名,但不复用方法的实现,在Dart中实现抽象类 更像在java中实现用interface修饰的接口
C.混入是多继承,当被混入的类有多个同名方法时,调用子类的该方法时,会调用with声明的最后一个拥有该方法的类中的该方法,同时混入中的父类不能继承

在父类继承的场景中,父类子类之间的构造函数执行顺序是怎样的?如果父类有多个构造函数,子类也有多个构造函数,如何从代码层面确保父类子类之间构造函数的正确调用?


class Point {
  num x, y;
  Point() : this.make(0,0);
  Point.left(x) : this.make(x,0);
  Point.right(y) : this.make(0,y);
  Point.make(this.x, this.y);
  void printInfo() => print('($x,$y)');
}

class Vector extends Point{
  num z = 0;
/*5个构造函数
  Vector
  Vector.left;
  Vector.middle
  Vector.right
  Vector.make
*/
  @override
  void printInfo() => print('($x,$y,$z)'); //覆写了printInfo实现
}

上一篇下一篇

猜你喜欢

热点阅读