【Flutter】Dart 面向对象 ( mixins 特性 )

简介: 【Flutter】Dart 面向对象 ( mixins 特性 )

文章目录

一、mixins 简介

二、mixins 判定示例

二、mixins 示例

四、 相关资源





一、mixins 简介


mixins 作用 : mixins 是 Dart 的重要特性 ;


添加特性 : mixins 可以为类添加一些特性 ;


重构代码 : mixins 是多个类层次结构中重构代码的一种途径 ;



mixins 使用 : 在 with 关键字后跟上若干 mixin 名称 , 如果有多个使用逗号分隔 ;


with 的位置 : 在 extends 关键字之后 , mixin 名称之前 ;



mixins 实现要素 ★ : 满足下面三种要求的类就是 mixins ;


① 继承 Object : 创建一个继承自 Object 的子类 , 不能继承其它类 ;


② 无构造方法 : 不能声明构造方法 , 所有的构造方法都不声明 ( 包括命名 , 工厂 , 普通构造方法 ) ;


③ 无 super 调用 : 不能通过 super 调用父类方法 ;


抽象类 和 普通类 都可以是 mixins ;






二、mixins 判定示例


判定下面的 Student2 , AbstractPerson , Student3 , Student4 哪个是 mixins ;


// 使用工厂构造方法实现单例模式
// 工厂构造方法就是单例模式
// 工厂构造方法作用是返回之前已经创建的对象 , 之前创建对象时需要缓存下来 ;
class Student2{
  // 静态成员
  static Student2 instace;
  // 工厂构造方法
  factory Student2(){
    if(instace == null){
      // 调用命名构造方法创建 Student2 对象
      instace = Student2.init();
    }
    // 返回单例对象
    return instace;
  }
  // 命名构造方法
  Student2.init();
}
// 定义抽象类 ★★
abstract class AbstractPerson{
  // 抽象类中可以定义没有方法体的方法
  void log();
  // 抽象类中可以包含有方法体的方法
  void log2(){
    print("AbstractPerson");
  }
}
// 继承抽象类 , 必须实现抽象类中的抽象方法
class Student3 extends AbstractPerson{
  @override
  void log() {
    print("Student3");
  }
}
// 抽象类继承抽象类 , 不必实现抽象类中的抽象方法
abstract class Student4 extends AbstractPerson{
}


Student2 有构造函数 , 不是 mixins ;


AbstractPerson 符合 mixins 三个条件 , 是 mixins ; 抽象类也可以是 mixins ;


Student3 不是继承自 Object , 不是 mixins ;


Student4 不是继承自 Object , 不是 mixins ;






二、mixins 示例


代码示例 : 通过 mixins 为 Student5 类添加了 AbstractPerson 特征 , 在开发中为现有的类赋予已经存在的 mixins 类的特性 ;


// 定义 Dart 类
// 与 Java 语言类似, 所有的类默认继承 Object 类
class Person{
  // 定义变量
  String name;
  int age;
  // 私有字段
  int _achievement;
  // 标准构造方法, 下面的方法是常用的构造方法写法
  Person(this.name, this.age);
  // get 方法 : 设置私有字段 achievement 的 get 方法,
  //            让外界可以访问 Person 对象的 _achievement 私有成员
  int get achievement => _achievement;
  // set 方法 : 设置私有字段 achievement 的 set 方法,
  //            让外界可以设置 Person 对象的 _achievement 私有成员值
  set achievement(int achievement){
    _achievement = achievement;
  }
  // 静态方法 , 通过类名调用
  static log(){
    print("log");
  }
  // 重写父类的方法
  @override
  String toString() {
    return "$name : $age";
  }
}
// 定义抽象类
abstract class AbstractPerson{
  // 抽象类中可以定义没有方法体的方法
  void log();
  // 抽象类中可以包含有方法体的方法
  void log2(){
    print("AbstractPerson");
  }
}
// ★★ 通过 mixins 为 Student5 类添加了 AbstractPerson 特征
// ★★ 在开发中为现有的类赋予已经存在的 mixins 类的特性
class Student5 extends Person with AbstractPerson{
  Student5(String name, int age) : super(name, age);
  @override
  void log() {
    // TODO: implement log
  }
}





四、 相关资源


参考资料 :


Flutter 官网 : https://flutter.dev/

Flutter 开发文档 : https://flutter.cn/docs ( 强烈推荐 )

官方 GitHub 地址 : https://github.com/flutter

Flutter 中文社区 : https://flutter.cn/

Flutter 实用教程 : https://flutter.cn/docs/cookbook

Flutter CodeLab : https://codelabs.flutter-io.cn/

Dart 中文文档 : https://dart.cn/

Dart 开发者官网 : https://api.dart.dev/

Flutter 中文网 ( 非官方 , 翻译的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/

Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 )


博客源码下载 :


GitHub 地址 : https://github.com/han1202012/flutter_app_hello ( 随博客进度一直更新 , 有可能没有本博客的源码 )


博客源码快照 : https://download.csdn.net/download/han1202012/15447573 ( 本篇博客的源码快照 , 可以找到本博客的源码 )


目录
相关文章
|
2月前
|
Dart
如何在 Flutter 项目中使用 Dart 语言?
如何在 Flutter 项目中使用 Dart 语言?
132 58
|
26天前
|
Dart
flutter dart mixin 姿势
flutter dart mixin 姿势
|
1月前
|
Dart 开发者 Windows
flutter:dart的学习
本文介绍了Dart语言的下载方法及基本使用,包括在Windows系统上和VSCode中的安装步骤,并展示了如何运行Dart代码。此外,还详细说明了Dart的基础语法、构造函数、泛型以及库的使用方法。文中通过示例代码解释了闭包、运算符等概念,并介绍了Dart的新特性如非空断言操作符和延迟初始化变量。最后,提供了添加第三方库依赖的方法。
30 12
|
3月前
|
Dart 前端开发 JavaScript
Flutter&Dart-异步编程Future、Stream极速入门
Flutter&Dart-异步编程Future、Stream极速入门
78 4
Flutter&Dart-异步编程Future、Stream极速入门
|
3月前
|
Dart JavaScript 前端开发
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
137 4
|
3月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
323 4
|
3月前
|
Dart 开发工具
消除Flutter doctor的警告Warning: `dart` on your path resolves to xxx/bin/dart
消除Flutter doctor的警告Warning: `dart` on your path resolves to xxx/bin/dart
69 0
|
1月前
|
Android开发 iOS开发 容器
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
|
3天前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
15 2
|
1月前
|
开发者
鸿蒙Flutter实战:07-混合开发
鸿蒙Flutter混合开发支持两种模式:1) 基于har包,便于主项目开发者无需关心Flutter细节,但不支持热重载;2) 基于源码依赖,利于代码维护与热重载,需配置Flutter环境。项目结构包括AppScope、flutter_module等目录,适用于不同开发需求。
77 3