首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Dart 学习之开发语言概览,带思维导图(二)

Dart 学习之开发语言概览,带思维导图(二)

作者头像
siberiawolf
发布于 2020-03-24 09:16:06
发布于 2020-03-24 09:16:06
1.8K00
代码可运行
举报
文章被收录于专栏:前端修炼之路前端修炼之路
运行总次数:0
代码可运行

库和可见性

  • 使用import关键字导入
  • dart内置库,使用dart:xxxx
  • 其他库,package:xxxx
  • 以下划线(_)开头的成员仅在代码库中可见
  • 每个 Dart 程序都是一个库,即便没有使用关键字 library 指定

库前缀

如果两个库代码有冲突,可以指定库前缀

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// 使用 lib1 的 Element 类。
Element element1 = Element();

// 使用 lib2 的 Element 类。
lib2.Element element2 = lib2.Element();

导入库的一部分

只想使用代码库中的一部分,你可以有选择地导入代码库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 只导入 lib1 中的 foo。(Import only foo).
import 'package:lib1/lib1.dart' show foo;

// 导入 lib2 中除了 foo 外的所有。
import 'package:lib2/lib2.dart' hide foo;

注释

单行注释

单行注释以 // 开始。所有在 // 和该行结尾之间的内容被编译器忽略。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 单行注释

多行注释

  • 不会忽略文档注释
  • 多行注释可以嵌套
  • 多行注释以 /` 开始,以 `/ 结尾。所有在 /` 和 `/ 之间的内容被编译器忽略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() {
  /*
   * This is a lot of work. Consider raising chickens.

  Llama larry = Llama();
  larry.feed();
  larry.exercise();
  larry.clean();
   */
}

文档注释

  • 在文档注释中,除非用中括号括起来,否则 Dart 编译器会忽略所有文本。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// A domesticated South American camelid (Lama glama).
///
/// Andean cultures have used llamas as meat and pack
/// animals since pre-Hispanic times.
class Llama {
  String name;

  /// Feeds your llama [Food].
  ///
  /// The typical llama eats one bale of hay per week.
  void feed(Food food) {
    // ...
  }

  /// Exercises your llama with an [activity] for
  /// [timeLimit] minutes.
  void exercise(Activity activity, int timeLimit) {
    // ...
  }
}

在生成的文档中,[Food] 会成为一个链接,指向 Food 类的 API 文档。

也就是说,在生成的文档中[Food]这个标识符就可以显示一个链接。

类型定义

  • 使用typedef显示保留类型信息
  • 目前类型定义只能在函数上
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 自定义一个类型
typedef Compare = int Function(Object a, Object b);

/// 使用类型定义的情况
class SortedCollection {
  Compare compare;  // 自定义类型

  SortedCollection(this.compare);
}

// 简单的不完整实现。
int sort(Object a, Object b) => 0;

void main() {
  SortedCollection coll = SortedCollection(sort);
  print(coll.compare is Function); // true
  print(coll.compare is Compare); // true
}

声明类

  • 使用class声明
  • 使用new创建一个对象,new可以省略
  • 所有对象都是一个类的实例
  • 所有的类都继承自 Object 类

使用类成员

  • 类的成员包括函数和数据
  • 使用(.)来访问变量和方法
  • 使用(?.)避免表达式为null
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Person p = Person();
  p.name = 'tom';
  p.age = 12;
  print(p.name); // tom

  /// ?. 
  // 因为p2是null,所以无法设置并且打印
  // 但是使用了?.以后就不会报错了。
  Person p2;
  p2?.name = 'jack';
  p2?.age = 13;
  print(p2?.name);  // null
}

class Person{
  String name;
  int age;
}

使用构造函数

  • 使用类名
  • 使用类名.标识符
  • 使用identical函数判断两个类的实例是否相等
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  // 通过 类 创建实例
  Person p = Person('tom', 12);
  print(p.name);  // tom
  print(p.age); // 12

  // 通过 类名.标识符 创建实例
  Person p2 = Person.fromJson({'name': 'jack', 'age': 13})  ;
  print(p2.name); // jack
  print(p2.age); // 13

  Animal a = const Animal('titi', 2);
  Animal b  = const Animal('titi', 2);
  print(a.name);
  print(a.age);

  print(b.name);

  // 两个实例相等
  print(identical(a,b));  // true


}

class Person{
  String name;
  int age;

  Person(this.name, this.age);

  Person.fromJson(Map<String, dynamic> json){
    name = json['name'];
    age = json['age'];
  }
}

// 常量构造函数
class Animal{
  final String name;
  final int age;

  const Animal(this.name, this.age);
}

实例变量

  • 所有未初始化的变量均会被设置为null
  • 所有实例变量均会隐式地声明一个 Getter 方法
  • 所有 非 final 变量均会隐式声明一个 Setter方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Point p = Point();
  print(p.x); // 调用x的 Getter

  p.y = 1; // 调用y的 Setter
  print(p.y); // 调用y的 Getter
}
class Point{
  int x,y;
}

命名式构造函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Point p = Point.origin();

  print(p.x); // 0
  print(p.y); // 1
}
class Point{
  int x,y;
  Point(this.x, this.y);

  // 命名式构造函数
  Point.origin(){
    x = 0;
    y = 1;
  }
}

调用父类非默认构造函数

调用顺序

  • 1.初始化列表
  • 2.父类的无参数构造函数
  • 3.当前类的构造函数

传递给父类构造函数的参数不能使用 this 关键字。

使用(:)为子类的构造函数指定一个父类的构造函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person {
  String firstName;

  Person.fromJson(Map data) {
    print('in Person');
  }
}

class Employee extends Person {.
  // Person没有默认构造函数
  // 需要通过 super.fromJson 来显示调用
  Employee.fromJson(Map data) : super.fromJson(data) {
    print('in Employee');
  }
}

main() {
  var emp = new Employee.fromJson({});

  // 打印:
  // in Person  先执行父类的构造
  // in Employee
  if (emp is Person) {  // emp类继承了Person
    emp.firstName = 'Bob';
  }
  print(emp.firstName); // Bob
  (emp as Person).firstName = 'Jack';
  print(emp.firstName);   // Jack
}

初始化列表

  • 在构造函数体执行前初始化变量
  • 初始化列表用来设置 final 字段是非常好用的
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person {
  String firstName;

  // 初始化列表 会比 构造函数优先执行
  Person.fromJson(Map data): firstName = data['firstName'] {
    print(firstName);
  }
}

main() {
  Person p = Person.fromJson({ 'firstName': 'zhangsan'});

}

设置final 字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'dart:math';

class Point {
  final num x;
  final num y;
  final num distanceFromOrigin;

  // 初始化列表设置final属性,非常好用
  Point(x, y)
      : x = x,
        y = y,
        distanceFromOrigin = sqrt(x * x + y * y);
}

main() {
  var p = new Point(2, 3);
  print(p.distanceFromOrigin);  // 3.605551275463989
}

重定向构造函数

  • 调用自己类中其它的构造函数
  • 没有函数体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {}

class Point {
  int x, y;
  Point(this.x, this.y);

  // 重定向构造函数
  // 在函数中调用另一个构造函数的形式
  Point.origin(int num) : this(num, 0);
}

常量构造函数

  • 属性用final定义为常量属性
  • 构造函数用const定义为常量构造函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Point p = const Point(0, 0);
  Point p2 = const Point(0, 0);

  Point p3 = Point(0, 0);

  // 这两个实例对象是相同的
  print(identical(p, p2)); // true

  // 如果不使用const声明实例,则不会相等
  print(identical(p, p3)); // false
}

class Point {
  // 变量必须用final 定义
  final num x, y;
  const Point(this.x, this.y); // 构造函数也是常量
}

工厂构造函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Person p = Person('tom');
  p.say();    // tom

}
 class Person{
   String name;

  // 必须static 定义
  static final Map<String, dynamic> _cach = Map<String, dynamic>();

   factory Person(String name){
     return _cach.putIfAbsent(name, () => Person._init(name));
   } 

   Person._init(this.name);

   void say(){
     print(name);
   }

 }

方法

实例方法

对象的实例方法可以访问实例变量和this

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Person p = Person('tom', 'hello title');
  p.say();
}

class Person{
  String name;
  String title;

  Person(this.name, this.title);

  void say(){
    // 可以访问变量
    print('name is $name');
    // 也可以访问this
    print(this.name);
  }
}

Getter和Setter

你可以使用 get 和 set 关键字为额外的属性添加 Getter 和 Setter 方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Point p = Point(1, 2, 3);
  print(p.point); // 6

  p.point = 0;
  print(p.point);
  print(p.z);
}

class Point {
  int x, y, z;

  Point(this.x, this.y, this.z);

  get point => x + y + z;
  // TODO: 这里为啥设置point 却返回z的值?
  set point(int num) => z = num + x;
}

抽象方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {

}
// 定义抽象类
abstract class Person{
  // 定义抽象方法
  void doSomething();
}

class Zhangsan extends Person{
  // 实现具体的方法
  void doSomething(){

  }
}

抽象类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  var me = Me();
  me.sayHello();
}

abstract class Person{
  String name;
  int age;

  void sayHello();
}

class Me extends Person{
  void sayHello(){
    print('hello');
  }
}

隐式接口

一个类可以通过关键字 implements 来实现一个或多个接口并实现每个接口定义的 API。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {

  print(saySomething(Person('张三')));

  print(saySomething(Man()));

}

String saySomething(Person person) => person.sayName('李四');

class Person {
  String _name;

  Person(this._name);

  String sayName(String name) => '$_name,你好。我是$name';
}

class Man implements Person {
  get _name => '谁也不是';

  set _name(String name) => ''; // 因为存在隐式的setter,所以这个也要定义

  String sayName(String name) => '$_name,你好。我是$name';
}

扩展一个类

  • 使用extends来扩展一个类
  • 使用super来引用一个父类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Man man = Man();
  man.sayName();
}

class Person{

  void sayName() => print('hello person');
}

class Man extends Person{

  void sayName() => super.sayName();  // 调用父类方法
}

重写类成员

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Man man = Man();
  man.sayName();
}

class Person{

  void sayName() => print('hello person');
}

class Man extends Person{

  @override
  void sayName() => print('hello man'); // 重写实例方法
}

重写运算符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Vector {
  final int x, y;

  Vector(this.x, this.y);

  Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
  Vector operator -(Vector v) => Vector(x - v.x, y - v.y);

  // 运算符 == 和 hashCode 的实现未在这里展示,详情请查看下方说明。
  // ···
}

void main() {
  final v = Vector(2, 3);
  final w = Vector(2, 2);

  assert(v + w == Vector(4, 5));
  assert(v - w == Vector(0, 1));
}

noSuchMethod

这个地方没有看明白

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Man man = Man();
  // man.name;
  // todo 怎么使用??
}

class Person {
  void sayName() => print('hello person');
}

class Man extends Person {
  void sayName() => super.sayName(); // 调用父类方法

  @override
  void noSuchMethod(Invocation invocation) {
    print('你尝试使用一个不存在的成员:' + '${invocation.memberName}');
  }
}

枚举

  • 使用enmu定义
  • 每个枚举值都有index
  • 使用values获取所有枚举
  • 枚举不能成为子类
  • 枚举不可以mixin
  • 不可以实现一个枚举
  • 不可以显示实例化一个枚举

使用枚举

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {

  print(Color.blue);  // 获取枚举

  print(Color.red.index);   // 获取枚举下标

  List<Color> colors = Color.values;  // 获取全部枚举

  print(colors[2]);

}

enum Color{ // 定义枚举
  red, blue, green
}

switch枚举

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  var aColor = Color.red;
  // 如果使用switch 则枚举中的每一个成员都得用case判断
  // 否则就会发出警告
  switch (aColor) {
    case Color.red:
      print('红色');
      break;
    case Color.blue:
      print('蓝色');
      break;
    case Color.green:
      print('绿色');
      break;
  }
}

enum Color {
  // 定义枚举
  red,
  blue,
  green
}

使用mixin为类添加功能

  • Mixin 是一种在多重继承中复用某个类中代码的方法模式
  • 使用with关键字
  • 使用mixin定义
  • 使用on规定哪个类可以使用

覆写操作符基本格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
返回类型 operator 操作符(参数1,参数2...){
    实现体...
    return 返回值
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  Musical musical = Musical();
  musical.doSomethin();
}
mixin Person {
  bool canCook = true;
  bool canSay = false;

  // mixin 模式不可以定义构造函数
  // Person();

  void doSomethin() {
    if (canCook == true) {
      print('可以做饭');
    } else if (canSay == true) {
      print('可以说话');
    }
  }
}
class Musical with Person{
  @override
  void doSomethin() {
    // TODO: implement doSomethin
    super.doSomethin();   // 直接调用父类
    print('我是子类哦');
  }
}

类变量和方法

静态变量

  • 静态变量在其首次被使用的时候才被初始化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  print(Person.name); // test static
}
class Person{
  static final String name = 'test static';

}

静态方法

  • 对于一些通用或常用的静态方法,应该将其定义为顶级函数而非静态方法
  • 可以将静态方法作为编译时常量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'dart:math';

class Point {
  num x, y;
  Point(this.x, this.y);

  static num distanceBetween(Point a, Point b) {
    var dx = a.x - b.x;
    var dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
}

void main() {
  var a = Point(2, 2);
  var b = Point(4, 4);
  // 对于一些通用或常用的静态方法,应该将其定义为顶级函数而非静态方法。
  var distance = Point.distanceBetween(a, b);
  assert(2.8 < distance && distance < 2.9);
  print(distance);
}

泛型

为什么使用泛型

  • 通常使用一个字母来代表类型参数,比如E、T、S、K 和 V 等等
  • 适当地指定泛型可以更好地帮助代码生成
  • 使用泛型可以减少代码重复

代码错误提示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  var names = List<String>(); // 声明为字符串数组,一旦不是则报错
  names.addAll(['Seth', 'Kathy', 'Lars']);
  // 提示报错
  // names.add(42); // Error
}

减少重复代码 使用泛型声明一个类,让不同类型的缓存实现该类做出不同的具体实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {}

abstract class Cache<T> {
  T getByKey(String key);
  void setByKey(String key, T value);
}

class Acache extends Cache<String> {
  String getByKey(String key) {
    // 具体实现时指定
    return 'hello';
  }

  void setByKey(String key, String value) {
    // 具体实现时指定
    print(11);
  }
}

使用集合字面量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  List list = <String>['1', '2', '3'];  // 字符串集合
  Set set = <String>{'1','2','3'}; // 字符串集合
  Map map = <String, int>{'age': 1, 'size':12}; // Map
}

使用类型参数化的构造函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  // 与字面量相对应,也可以通过构造函数的方式使用泛型
  Map map = Map<String, int>();
}

泛型集合以及他们所包含的类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  List list = List<String>();
  // list.addAll(['1','2']); 
  // 如果此时使用addAll则会报错
  list.add('1');
  list.add('2');
  print(list is List<String>); // true

  var names = List<String>();
  names.addAll(['小芸', '小芳', '小民']);
  print(names is List<String>); // true
}

限制参数化类型

  • 指定参数类型
  • 不指定参数类型,使用默认类型
  • 错误参数类型,编译报错
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  var someBaseClassFoo = Foo<SomeBaseClass>();
  var extenderFoo = Foo<Extender>();

  print(someBaseClassFoo.toString()); // 'Foo<SomeBaseClass>' 的实例
  print(extenderFoo.toString()); // 'Foo<Extender>' 的实例

  // 如果不指定泛型,默认是SomeBaseClass
  var foo = Foo();
  print(foo);
  // 将非 SomeBaseClass 的类型作为泛型参数则会导致编译错误
  // var foo = Foo<Object>(); 
}

class SomeBaseClass {}

// 这里的T,其实可以随意指定。一般是T、E、S、K等
class Foo<T extends SomeBaseClass> {
  // 具体实现……
  String toString() => "'Foo<$T>' 的实例";
}

class Extender extends SomeBaseClass {}

使用泛型方法

  • 函数的返回类型
  • 参数的类型List
  • 局部变量的类型
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {
  var list = List<String>();
  list.addAll(['1','2']);

  var firstValue = first(list);
  print(firstValue);  // 1
}
T first<T>(List<T> ts) {
  // 处理一些初始化工作或错误检测……
  T tmp = ts[0];
  // 处理一些额外的检查……
  return tmp;
}

异步支持

处理Future

  • 使用 async 和 await 的代码是异步的,但是看起来有点像同步代码
  • 必须在带有 async 关键字的 异步函数 中使用 await
  • 使用 try、catch 以及 finally 来处理使用 await 导致的异常
  • await 表达式的返回值是一个 Future 对象
  • Future 对象代表一个“承诺”,await 表达式会阻塞直到需要的对象返回
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {}
// async 与 await同时使用
Future checkVersion() async {
  // 通过 try-catch 捕获异常
  try {
    var version = await lookUpVersion();
  } catch (e) {
    // 无法找到版本时做出的反应
  }
}

void lookUpVersion() {}

异步函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main(List<String> args) {

}
// 普通函数直接添加async关键字即可
Future<String> lookUpVersion() async => '1.0.0';

处理Stream

  • 使用async和await for循环
  • 使用Stream API
  • 表达式 的类型必须是 Stream
  • 使用 break 和 return 语句停止接收 Stream 数据,跳出循环
  • 1.等待直到 Stream 返回一个数据
  • 2.使用 1 中 Stream 返回的数据执行循环体
  • 3.重复 1、2 过程直到 Stream 数据返回完毕

可调用类

通过实现类的 call() 方法,允许使用类似函数调用的方式来使用该类的实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// WannabeFunction 类定义了一个 call() 函数,函数接受三个字符串参数,函数体将三个字符串拼接,字符串间用空格分割,并在结尾附加了一个感叹号

class WannabeFunction {
  String call(String a, String b, String c) => '$a $b $c!';
}

var wf = WannabeFunction();
var out = wf('Hi', 'there,', 'gang');

main() => print(out);

思维导图

制作的思维导图,加深学习印象。如有错误欢迎指正。

原始图片比较大,为了保证打开速度只上传了一张截图。如果需要高清图片可以在我的源码「https://github.com/siberiawolf/dart_study」文件中找到。

思维导图 (完结)


参考资料:

  • Dart语法学习 「https://www.jianshu.com/p/9e5f4c81cc7d」
  • 官方文档中文版「https://dart.cn/guides/language/language-tour」
  • 官网文档英文版「https://dart.dev/guides/language/language-tour」
  • Dart SDK API 中文版「http://www.shutongye.com/dartapi/index.html」
  • Flutter开发第一步-Dart编程语言入门「https://www.imooc.com/learn/1035」
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端修炼之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Dart入门
反射:https://www.jianshu.com/p/d68278d19f79
前端小鑫同学
2022/12/24
1.7K0
『Flutter开发实战』一小时掌握Dart语言
本文将从变量和运算符开始到类和库的使用来向你介绍 Dart 编程语言的主要功能,这里假设你已经有使用其它语言进行编程的经验。
小宋是呢
2022/01/05
5.3K0
Dart语言指南(二) 顶
Dart是一种面向对象的语言 包含类和基于 mixin 的继承两部分。每个对象是一个类的实例, 并且 Object.是所有类的父类。 基于 mixin 的继承指的是每个类(除了 Object )都只有一个父类,类体还可以在多个类继承中被重用。
南郭先生
2018/08/14
3.2K0
Dart语言指南(二)
                                                    顶
上手指南 | Dart,随用随查
dynamic:该类型具有所有可能的属性和方法,一个变量被 dynamic 修饰,相当于告诉系统,我知道这个类型到底是什么。使用后再编译时不会推断数据的类型,但是运行时会推断。
345
2022/02/11
1.9K0
上手指南 | Dart,随用随查
Dart语言基础
  var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。
zhangjiqun
2024/12/16
1540
dart class overview
最近在折腾 flutter 相关的东西,所以当然要撸一下 dart 了。编程语言这个东西,接触得多了学习起来速度会提升不少,但是不同的语言具有不同的特色,我们需要花一些时间去关注它们的卖点,而且对于大部分面向对象语言,也需要格外注意类的概念,因此专门花了一些时间结合官方文档整理学习 dart 中关于类的内容。
littlelyon
2018/10/19
8180
Dart学习笔记(六)——库
当引入的两个库具有相同的名称标识符的时候,会造成冲突。这个时候就可以使用as关键字来指定库的前缀。
拉维
2019/08/12
4540
Dart学习笔记(六)——库
Dart 学习之开发语言概览,带思维导图(一)
之前在学习flutter,本以为自己可以轻松上手掌握dart,结果发现经常有不懂的语法。所以决定踏踏实实的学习一遍dart。网上有很多相关学习资料.我主要从官网来学习,然后又找了一个视频来补充学习。
siberiawolf
2020/03/24
1.9K0
Dart 学习之开发语言概览,带思维导图(一)
Dart 基础知识笔记
开发过程中可以使用 assert(condition , optionalMessage) 断言,检查某些条件是否为真。断言通常由工具或框架决定是否生效:
徐建国
2021/08/02
1.2K0
Flutter Lesson 2: Dart 语法简单介绍
Dart语法【Dart中文】可以说是Google因为为Flutter量身定做的一门语言,所以,我们之前基本上都没有接触过这门语言,在入手Flutter坑的时候,还必须了解一下Dart的语言特性。
踏浪
2019/07/31
1.9K0
Flutter Lesson 2: Dart 语法简单介绍
Dart学习笔记(三)
getUserInfo是自定义的函数,name和age是函数的参数,这两个参数都是必填,不然在调用的时候会报错。那么如何添加可选参数呢?如下:
拉维
2019/08/12
4860
Dart 知识点 - 构造方法
上一篇文章Dart 知识点 - 面向对象基础中,我们已经初步了解了类的构造方法,本文,我们详细来学习一下构造函数。
Jimmy_is_jimmy
2022/09/19
4670
Dart语法基础系列七《类》
如果该类生成的对象是固定不变的, 那么就可以把这些对象定义为编译时常量。 为此,需要定义一个 const 构造函数, 并且声明所有实例变量为 final。
星宇大前端
2021/11/10
3970
Dart 概览
元数据注解是以 @ 字符开头,后面是一个编译时 常量(例如 deprecated)或者 调用一个常量构造函数。
前端GoGoGo
2019/07/01
8790
来学习了解下Flutter及Dart 编码规范?
如果你是一个人开发,当然不需要在意这些问题,但是如果你的代码需要展现给别人,或者你需要与别人协同开发,编码规范就非常有必要了。
Android技术干货分享
2019/08/06
2.8K0
Dart入门
要学Flutter必先学Dart,Dart和Java的语法很像,学过Java的人很快就能入手
用户3112896
2019/12/27
8560
flutter--Dart基础语法(三)类和对象、泛型、库
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,Flutter 开源、免费,拥有宽松的开源协议,支持移动、Web、桌面和嵌入式平台。
mukekeheart
2021/02/04
4K0
flutter--Dart基础语法(三)类和对象、泛型、库
Dart语言进阶语法(二)
Dart中的类与Java中的相似,不同的是,Dart中没有private、public这些成员访问修饰符。如果是类私有的成员,不希望外面访问,只需要在成员变量之前加上一个下划线_变为私有即可。
arcticfox
2019/09/17
1.8K0
Dart语言进阶语法(二)
Dart 中构造函数定义与使用详解 原
在这种没有构造函数的情况下Dart会为其隐式定义一个默认构造函数(与类名相同、无参数)
南郭先生
2018/08/14
1.7K0
Dart的语法详解系列篇(二)-- 类与函数八、Dart的类与函数
上一篇主要讲了数据类型、运算符、流程语句等,由于文字太多,我就把剩下的内容分开写一篇文章。 这一篇我们讲Dart的类与函数,内容较多,希望大家可以耐心看完。我也是花了很长时间研究的。喜欢的九点个赞,打个赏吧。 感谢大家支持。
AWeiLoveAndroid
2019/01/03
3.2K0
相关推荐
Dart入门
更多 >
LV.0
UndefinedNull
目录
  • 库和可见性
    • 库前缀
    • 导入库的一部分
  • 注释
    • 单行注释
    • 多行注释
    • 文档注释
  • 类型定义
    • 声明类
    • 使用类成员
    • 使用构造函数
    • 实例变量
    • 命名式构造函数
    • 调用父类非默认构造函数
    • 初始化列表
    • 重定向构造函数
    • 常量构造函数
    • 工厂构造函数
  • 方法
    • 实例方法
    • Getter和Setter
    • 抽象方法
    • 抽象类
    • 隐式接口
    • 扩展一个类
    • 枚举
    • 使用mixin为类添加功能
    • 类变量和方法
  • 泛型
    • 为什么使用泛型
    • 使用集合字面量
    • 使用类型参数化的构造函数
    • 泛型集合以及他们所包含的类型
    • 限制参数化类型
    • 使用泛型方法
  • 异步支持
    • 处理Future
    • 异步函数
    • 处理Stream
  • 可调用类
  • 思维导图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档