构造函数

在dart中构造函数的名字可以是 ClassName 或者 ClassName.identifier。如:

class Point {num x, y;Point(this.x, this.y);// 命名构造函数Point.fromJson(Map data) {...}
}

以下代码使用 Point 和 Point.fromJson() 构造函数创建 Point 对象:

var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});

以下代码具有相同的效果, 但是构造函数前面的的 new 关键字是可选的:

var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});

版本提示: 在 Dart 2 中 new 关键字变成了可选的。

factory工厂构造函数

factory关键字用于修饰构造函数,这种构造函数称为工厂构造函数。

当执行构造函数并不总是创建这个类的一个新实例时,则使用 factory 关键字。 例如,一个工厂构造函数可能会返回一个 cache 中的实例, 或者可能返回一个子类的实例。

提示: 工厂构造函数无法访问 this。

工厂构造函数的调用方式与其他构造函数一样

dynamic和var和object

dynamic

在dart中dynamic是一个关键字,表示动态变量。被dynamic修饰的变量可以是任意类型,编译时不会检查类型,只有在运行时才推断类型。且同时可以随着值的变化变成另外一个类型。

dynamic x = 'hello';//编译时不会揣测数据类型,但是运行时会推断
print(x.runtimeType);//String
print(x);
//但是这样的坏处就是会让dart的语法检查失效,所以有可能会造成混乱而不报错
//所以不要直接使用dynamic
x = 123;
print(x.runtimeType);//int,说明类型是可变的
print(x);

var

var同样是一个关键字,所谓的“弱类型“。被它修饰的变量也可以是任意类型,但是编译时就会确定类型,所以后续不能再改变类型。

var a = 'hello';
print(a.runtimeType);
print(a);
//a = 123;//会报错,因为第一句已经将类型确定下来
a = '123';
print(a);

var实际上就是开发者并不关心它的类型,有编译器自动判断类型

Object

Object与java中的一样,是所有class的基类。它是静态类型检查,所以如果要使用其子类的函数,需要先进行类型转换

Object w = 1;
print(w.runtimeType);
print(w);
//不能调用Object不存在的方法

Map

在dart中,Map可以如json格式一般直观的创建,如

var gifts = {'first': 'partridge','second': 'turtledoves','fifth': 'golden rings'
};var nobleGases = {2: 'helium',10: 'neon',18: 'argon',
};

当然也可以使用构造函数,如

var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

使用时也一样,直接用中括号[]取值,没有get之类的函数。

String first = gifts['first']

json

jsonDecode

jsonDecode是将json格式字符串转成json

dynamic jsonDecode(String source, {Object reviver(Object key, Object value)})

这里dynamic是dart中的一个关键字,就是动态类型。这里不细说了。

jsonDecode实际上返回的会是Map或者List,分别对应JsonObject和JsonArray
如果是Map,可以直接通过“[]“访问属性

var json = jsonDecode(str);
var name = json['name'];

如果是List,则可以通过forEach遍历

var array = jsonDecode(str);
array.forEach((item){var name = item['name'];  //这里假设了array里是Map,也可以是List,String,int等,也可以是混合的
});

jsonEncode

jsonEncode是将object转成json格式的字符串。

String jsonEncode(Object value, {Object toEncodable(Object nonEncodable)})

这里注意object类必须实现Map toJson()函数,否则报错

Unhandled exception:

Converting object to an encodable object failed: Instance of ‘xxx’

这是因为jsonEncode正是调用这个函数才将一个对象转成字符串的,而这个函数实际上就是将这个对象转成Map。

比如:

class JsonDemo {String name;String value;Map toJson() {Map map = new Map();map["name"]= this.name;map["value"] = this.value;return map;}
}

解析

JsonDemo jsonDemo = new JsonDemo();
...
String str = jsonEncode(jsonDemo);

关注公众号:BennuCTech,发送“电子书”获取经典电子资料。

Flutter入门:dart基础相关推荐

  1. Flutter从入门到精通之Dart基础篇(一)

    学Flutter必须先学会Dart 目录 什么是Dart? 环境搭建 入门HelloWorld 基础知识 1.  变量.常量.命名规则 2.  Dart的数据类型 3.  Dart的条件表达式 4.  ...

  2. Flutter(Dart)基础——函数详解

    Flutter(Dart)基础--函数详解 在Dart中,函数(或方法)也是对象,它的类型是 Function. 这意味着,函数可以赋值给变量,也可以当做其他函数的参数. 函数的声明 基本上与Java ...

  3. Flutter 学习 - Dart 语言基础

    文章目录 前言 一.Dart 概述 Dart 重要的概念 二.变量与基本数据类型 三.函数 四.运算符 五.流程控制语句 六.异常处理 七.面向对象 构造函数 继承类 抽象类 枚举类型 八.泛型 九. ...

  4. Flutter(Dart)基础——数据类型

    Flutter(Dart)基础--数据类型 Dart 数据类型 Dart 中所有的对象都是对应一个类的实例.无论是int.函数和 null 等都是对象. Dart 中所有对象继承自 Object 类. ...

  5. Flutter的优势以及Dart基础语法

    1.为什么要学习Flutter? 对于移动端开发人员来说,跨平台技术一直是关注的重点,从H5,React Native到Flutter,我们似乎一直在寻找一种能"一套代码,多端运行" ...

  6. Flutter入门实战教程:从0到1仿写web版掘金App (完结)

    前言 准确的说,这是去年十一月份就写好的教程, 虽然迟迟未上线(拖了半年),但是非常感谢购买的老铁们~ 虽然心中很不爽, 但是回头想想,也是的确写的比较仓促,但是当时自己在写的过程中,的确能学到很多东 ...

  7. Flutter入门实战:从0到1仿写web版掘金App

    2018曾埋下一粒种子,今年一定要写一本小册... 前言 立贴的方向曾今是分析react源码并实现react mini...的确亚历山大,后因团队技术方向探索以及业务压力,没有太多时间来学习源码.当然 ...

  8. Flutter 入门经典

    Flutter是Google公司推出的新一代前端框架,最初目标只是为了满足移动端跨平台的应用开发, 开发人员可使用 Flutter 在 iOS 和 Android 上快速构建高质量的原生用户界面.但如 ...

  9. Flutter入门进阶之旅(十二)Flutter 数据存储

    前言 之前的章节我们基本上把Flutter中基础部分的东西都做了简单的讲解,通过前面章节的循序学习读者也基本能完成一些简单的UI绘制并能利用Flutter处理一些简单的用户交互,读者可能也留意到,我们 ...

  10. 【Flutter】Dart 函数 ( 函数构成 | 私有函数 | 匿名函数 | 函数总结 )

    文章目录 一.Dart 函数构成 二.Dart 私有函数 三.Dart 匿名函数 四.完整代码示例 五.Dart 方法总结 六. 相关资源 一.Dart 函数构成 Dart 函数构成 : 方法名 , ...

最新文章

  1. java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作
  2. 常见的Java WEB服务器
  3. pwn学习总结(三) —— 栈溢出经典题型整理
  4. shiro认证与授权:自定义realm
  5. STM32F7xx —— ADC
  6. python中的常见的列表操作及注意事项
  7. Debian分区工具partman
  8. Java 打印某年某月的月日历
  9. 5G无线增强设计与国际标准 个人整理(PDF和Word)
  10. Python随机函数
  11. 开源智能手表TTGO-WATCH上手把玩(0)环境配置
  12. html 手机录视频,手机怎么录制视频 怎么用手机录视频?
  13. 前端开发中遇到常见问题总结
  14. 联想微型计算机如何设置u盘启动,联想电脑怎么设置U盘启动
  15. 用计算机处理医学信息处理,医学信息处理
  16. 如何关闭掉magento后台没用的功能
  17. 舞动你的文字,巧用CSS中marquee属性
  18. 目标检测常用评价指标笔记
  19. 2021-10-28 三元组顺序表表示的稀疏矩阵加法
  20. k8s实战系列:3-存储的花样玩法(上)

热门文章

  1. 自定义的Sort对象
  2. bzoj4316: 小C的独立集
  3. java中的神奇this
  4. 给vmstat加上时间戳
  5. js实现星级评分效果(非常规5个li代码)
  6. NSArray文件读写
  7. Oracle86和92语法的连接,子查询,集合的操作
  8. StoryBoard学习..(很详细.)
  9. 电信运营商物联网实践建议
  10. (收藏)Html相关网址