日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flutter入门:dart基础

發布時間:2024/4/15 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。