Flutter入门:dart基础

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

构造函数


在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);


目录
相关文章
|
1月前
|
前端开发 C++ 容器
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
|
1月前
|
Dart 前端开发 开发工具
【Flutter前端技术开发专栏】Flutter入门指南:搭建开发环境与第一个应用
【4月更文挑战第30天】本文介绍了Flutter SDK的安装和配置过程,以及如何创建并运行第一个Flutter应用。首先确保安装了Dart SDK和Flutter SDK,支持macOS、Linux和Windows。安装完成后,设置环境变量,然后通过`flutter doctor`验证安装。接着,使用`flutter create`命令创建新项目,进入项目目录并运行`flutter run`启动应用。在`main.dart`中修改代码以自定义应用。Flutter支持热重载和DevTools调试。本文为Flutter初学者提供了快速入门的指导。
【Flutter前端技术开发专栏】Flutter入门指南:搭建开发环境与第一个应用
|
1月前
|
Dart 安全
简化代码、提高效率:Dart和Flutter开发小技巧
在日常开发中,我们常常会使用一些常用的技巧或语法糖,以简化代码、提高开发效率。本文将分享一些在Dart和Flutter中常用的小贴士,帮助你更轻松地编写优雅高效的代码。
简化代码、提高效率:Dart和Flutter开发小技巧
|
1月前
|
Dart 测试技术 UED
Dart 和 Flutter 错误处理指南 | 最佳实践全解析
深入探索 Dart 和 Flutter 中的错误处理技术,从编译时错误到运行时异常,带你学习如何优雅地处理应用程序中的各种意外情况。了解最佳实践,让你的应用程序稳如磐石,用户体验持续优化!
Dart 和 Flutter 错误处理指南 | 最佳实践全解析
|
1月前
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
|
1月前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
【4月更文挑战第30天】Dart是Google为Flutter框架打造的高效编程语言,具有易学性、接口、混入、抽象类等特性。本文概述了Dart的基础语法,包括静态类型(如int、String)、控制流程(条件、循环)、函数、面向对象(类与对象)和异常处理。此外,还介绍了库导入与模块使用,帮助开发者快速入门Flutter开发。通过学习Dart,开发者能创建高性能的应用。
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
|
1月前
|
开发框架 Dart Java
Flutter的核心:Dart语言基础——语法与特性深度解析
【4月更文挑战第26天】Flutter框架背后的Dart语言,以其简洁的语法和独特特性深受开发者喜爱。本文深入解析Dart的语法与特性,如类型推导、动态静态类型系统、统一的类接口、访问权限控制以及并发编程支持。了解并掌握Dart,能助开发者更高效地利用Flutter构建高性能移动应用。
|
1月前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求
|
1月前
|
Dart JavaScript 安全
|
1月前
|
Dart JavaScript
Flutter - Dart 基础(数据类型)
【2月更文挑战第3天】
107 1