【Flutter】dart构造函数、工厂构造函数

这篇具有很好参考价值的文章主要介绍了【Flutter】dart构造函数、工厂构造函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在OOP中,我们会使用类来定义一类对象的属性,和行为。通过调用该类的构造函数来创建类的实例对象。在通过调用方法来实现操作行为。

1、构造函数

和大多数OOP语言一样,dart的构造函数,采用和类同名的函数名作为构造函数,不显示声明构造函数会自动创建无参构造,构造函数不会被继承。此处不在赘述。关于dart特有的 命名构造函数稍微说明一下。

1.1 命名构造函数

开发中,我们通常会MapJson互转的场景,关于构造函数我们使用下面例子

import 'dart:convert';

class Token {
  final String token_type;
  final int expires_in;
  final String access_token;
  // final String? refresh_token;

  Token.fromJson(Map<String, dynamic> json)
      : token_type = json['token_type'],
        expires_in = json['expires_in'],
        access_token = json['access_token']
  // refresh_token = json.containsKey('refresh_token') ? json['refresh_token'] as String : ''
  ;

  Map<String, dynamic> toJson() => {
        'token_type': token_type,
        'expires_in': expires_in,
        'access_token': access_token,
        // 'refresh_token': refresh_token,
      };
}

2 factory constructor

2.1 官方文档

使用factory 修饰构造函数的时候,并不总是创建该类的实例对象。构造函数会从缓存返回一个实例。

2.1 官方例子

class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to
  // the _ in front of its name.
  static final Map<String, Logger> _cache = <String, Logger>{};

  factory Logger(String name) {
    return _cache.putIfAbsent(name, () => Logger._internal(name));
  }

  factory Logger.fromJson(Map<String, Object> json) {
    return Logger(json['name'].toString());
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
  }
}
  • 定义了个Map用于cachelogger 实例对象。
  • 该类主要用于打印包含字符和Map(包含name属性的Map)log信息。
  • name字符变量改变也会创建新的Logger对象
  • 打印只包含name的map对象,真的是妙啊!!!!!!!!

2.3 jeverson 关于工厂构造的理解

  • factory 构造函数即为设计模式中的工厂模式
  • factory 构造函数创建的实例和单例差不多
2.3.1 关于Logger的改造
class Logger {
  factory Logger.create(ELogType type) {
    if (type == ELogType.info) {
      return Logger._infoLog();
    }
    if (type == ELogType.error) {
      return Logger._errorLog();
    }
    if (type == ELogType.warning) {
      return Logger._warningLog();
    }
    return Logger._infoLog();
  }

  Logger._infoLog() : displayColor = ELogType.info.logColor;
  Logger._errorLog() : displayColor = ELogType.error.logColor;
  Logger._warningLog() : displayColor = ELogType.warning.logColor;

  String displayColor;
}

enum ELogType {
  info(color: "white"),
  warning(color: "yellow"),
  error(color: "red");

  const ELogType({required this.color});

  final String color;

  String get logColor => color;
}

  • 基于简单工厂实现的一个Logger案例,当然现实中的Logger 在info,error,warning 的细数逻辑,并不是简单的赋值。
  • 关于抽象工厂的实现方式,本例不展开扩展,改造近提供设计的思路。

2.3.2 关于工厂构造在Flutter 的使用场景

  • 基础框架中的,日志收集以及需要采用单例模式
  • C端差异化源组件设计化的差异,Alert,Toast,HUD等
  • 通用业务的抽离。

TODO: 关于业务场景的实例拓展,文章来源地址https://www.toymoban.com/news/detail-812561.html

到了这里,关于【Flutter】dart构造函数、工厂构造函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter学习2 - Dart

    Dart语言特点: Dart 2.0 开始便是强类型语言,而且是静态类型的(可以类比Java,C#等) 强类型语言的优点:所有类型的检查必须在编译的时候完成 前端开发的 js 语言是弱类型的语言 强类型的语言需要在定义的时候指定类型,如果不指定,编译器也可以在赋值的时候推断出变

    2024年02月21日
    浏览(32)
  • 【Flutter】Dio 强大的Dart/Flutter HTTP客户端

    Dio是一个强大的Dart/Flutter HTTP客户端,支持全局配置、拦截器、FormData、请求取消、文件上传/下载、超时等功能。 首先,

    2024年02月11日
    浏览(33)
  • 无涯教程-Flutter - Dart简介

    Dart是一种开源通用编程语言,它最初是由Google开发的, Dart是一种具有C样式语法的面向对象的语言,它支持诸如接口,类之类的编程概念,与其他编程语言不同,Dart不支持数组, Dart集合可用于复制数据结构,例如数组,泛型和可选类型。 以下代码显示了一个简单的Dart程序

    2024年02月10日
    浏览(38)
  • Flutter Dart语言(05)异步

    该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。 在Dart语言中,虽然没有像其他语言(如Java、C++、Python)中的传统多线程概念,但它采用了异步(asynchronous)编程模型来处理并发任务。Dart使用asy

    2024年02月14日
    浏览(27)
  • 【Flutter】Dart/Flutter SDK如何降低版本、回退到指定版本

    因为dart3.0以后不再支持 no-sound-null-safety;但是有些项目不得以切换到dart3.0以前继续使用运行项目 方法1: 通过 命令,将flutter降级为当前通道的上一个活动版本; 如果没有存在老版本则会提示 flutter downgrade There is no previously recorded version for channel “stable”. 这样的话则可以通

    2024年02月16日
    浏览(26)
  • flutter的引擎,Dart语言概括

    Dart是谷歌开发的, 类型安全的 , 面向对象 的编程语言,被应用于 Web、服务器、移动应用和物联网 等领域。 dart是谷歌在2011年推出的编程语言。谷歌希望使用dart来取代JavaScript。谷歌是一个颠覆式创新公司,谷歌退出golang是为了取代java,c++。谷歌退出flutter就是为了取代R

    2023年04月22日
    浏览(33)
  • Flutter Dart语言(04)库操作

    该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。 引入代码如下所示: 一般从官方网站:Page 1 | Top packages中 搜索需要的第三方库,打开项目中的配置文件,名为:pubspec.yaml,找到dependencies选项,这

    2024年02月14日
    浏览(27)
  • Flutter 四:main.dart简单介绍

    main.dart简单介绍 运行结果

    2024年02月03日
    浏览(26)
  • 【第二章 flutter学习之Dart介绍】

    Dart是谷歌开发的计算机编程语言,诞生于2011,可以被用于web、服务器、移动应用、物联网应用的开发。要学习flutter必须会Dart 安装 Dart Sdk vscode安装dart

    2024年02月12日
    浏览(29)
  • flutter dart json 转model用法

    定义model: 使用方法:

    2024年02月11日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包