Flutter入门:dart基础
Posted BennuCTech
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter入门:dart基础相关的知识,希望对你有一定的参考价值。
构造函数
在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基础的主要内容,如果未能解决你的问题,请参考以下文章
flutter基础入门教程(Dart语法+UI布局+页面路由+后端连接)