更新已支持Machtml
爲何要作這個工具呢?java
1.總是被服務端坑,各類數據類型不對linux
2.參數命名混亂,強迫症根本不能忍git
3.官方的不能自定義,而後我以前用的大佬們寫的工具debuggerx01大佬,低調大佬,可是有些需求,仍是很差總是麻煩大佬,就想着本身寫方便一些github
工具使用UWP,WPF和Silverlight開發,緣由以下:golang
1.我是一個C#喵,從開始學習java,到入坑微軟作Xaml,Silverlight,WPF,WindowsPhone,UWP 全套靈活運用。在最大的componentone/grapecity控件公司呆過幾年,轉作Flutter以後繼續專一自定義組件 FlutterCandies, 但願能分享更多的Flutter組件,爲你們提供方便。 那個。。話題扯遠了。。總結一下,我以爲用UWP/WPF/Silverlight 海陸空一套代碼完成這個工具會很方便web
2.也不是沒有考慮用Dart寫,畢竟支持web/windows/mac。可是我這個工具界面上面的佈局,須要不少輸入框進行自定義修改。Flutter如今的沒有提供舒服的雙向綁定方式,想想每個輸入框就要一個control,頭有點大。。json
功能最全面的Json轉換Dart的工具,支持Windows,Mac,Web以及Linux。windows
相關:數組
Flutter Candies qq羣181398081
平臺 | 語言 | 描述 | 代碼/安裝包地址 |
---|---|---|---|
windows | C# | uwp構建,運行環境windows10,x86/x64 | windows-uwp.zip |
windows | C# | wpf構建,運行環境windows10/windows8/widnows7,x86/x64 | windows-wpf.zip |
windows | dart | flutter構建, 使用官方方式編譯,x64 ,debug版本 | windows-x64-flutter.zip |
windows | dart | flutter構建, 使用go-flutter編譯,x64 ,debug版本 | windows-x64-go-flutter.zip |
mac | dart | flutter構建,使用go-flutter編譯(官方方式,未找到產物) | mac-go-flutter.zip |
web | C# | silverlight構建, 須要安裝silverlight插件,有瀏覽器限制 | 網頁地址和帶字體文件網頁地址 |
web | dart | flutter-web構建 | 網頁地址 |
linux | dart | flutter構建, 使用官方方式編譯,(沒有環境測試,僞裝能夠用) | 代碼地址 |
Windows10 用戶
考慮到應用商店常常大姨媽,就沒有上傳到商店了。
下載好安裝包,解壓。
第一次安裝,須要安裝證書,請按照下圖,使用PowerShell打開Add-AppDevPackage.ps1,一路接受就安裝完畢
後面若是工具備更新,能夠下載最新的,而後點擊FlutterCandiesJsonToDart_x.0.x.0_x86_x64.appxbundle 安裝
Windows7/Windows8 用戶
下載解壓,點擊setup.exe安裝
帶字體文件是由於可能有亂碼,因爲中文字體問題,包含了中文字體文件,第一次會比較久,請耐心等待
首先須要安裝Silverlight
Mac的用戶下載Mac的,Windows用戶下載Windows的
而後就是瀏覽器問題了,由於支持Silverlight的瀏覽器是有限的,除了Internet Explorer支持,如下版本的瀏覽器也支持.
Mac Firefox這個版本能使用
點擊json_to_dart啓動
flutter官方產物或者go-flutter產物爲exe,點擊exe啓動
左邊是json的輸入框以及最後Dart生成的代碼,右邊是生成的Json類的結構
點擊格式化按鈕,將json轉換爲右邊可視化的json類結構
設置會所有自動保存(flutter版本除外,須要手動保存),一次設置終身受益
你們必定會有被服務端坑的時候吧? 不按規定好了的數據類型傳值,致使json整個解析失敗。
打開這個開關,就會在獲取數據的時候加一層保護,代碼以下
dynamic convertValueByType(value, Type type, {String stack: ""}) {
if (value == null) {
debugPrint("$stack : value is null");
if (type == String) {
return "";
} else if (type == int) {
return 0;
} else if (type == double) {
return 0.0;
} else if (type == bool) {
return false;
}
return null;
}
if (value.runtimeType == type) {
return value;
}
var valueS = value.toString();
debugPrint("$stack : ${value.runtimeType} is not $type type");
if (type == String) {
return valueS;
} else if (type == int) {
return int.tryParse(valueS);
} else if (type == double) {
return double.tryParse(valueS);
} else if (type == bool) {
valueS = valueS.toLowerCase();
var intValue = int.tryParse(valueS);
if (intValue != null) {
return intValue == 1;
}
return valueS == "true";
}
}
複製代碼
在循環數組的時候,一個出錯,致使json整個解析失敗的狀況,你們遇到過吧?
打開這個開關,將對每一次循環解析進行保護,代碼以下
void tryCatch(Function f) {
try {
f?.call();
} catch (e, stack) {
debugPrint("$e");
debugPrint("$stack");
}
}
複製代碼
在服務器返回的數據中,有時候數組裏面不是每個item都帶有所有的屬性,
若是隻檢查第一個話,會存在屬性丟失的狀況
你能夠經過屢次循環來避免丟失屬性
選項有1,20,99
99就表明循環所有進行檢查
屬性命名規範選項:保持原樣,駝峯式命名小駝峯,帕斯卡命名大駝峯,匈牙利命名下劃線
Dart 官方推薦 駝峯式命名小駝峯
對屬性進行排序
排序選項: 保持原樣,升序排列,降序排序
是否添加保護方法。數據類型全方位保護/數組全方位保護 這2個開啓的時候會生成方法。第一次使用的時候開啓就能夠了,你能夠方法提出去,後面生成Dart就沒有必要每一個文件裏面都要這2個方法了。
能夠在這裏添加copyright,improt dart,建立人信息等等,支持[Date yyyy MM-dd]來生成時間,Date後面爲日期格式。
好比[Date yyyy MM-dd] 會將你生成Dart代碼的時間按照yyyy MM-dd的格式生成對應時間
點擊格式化以後,右邊會顯示可視化的json類結構,在右邊一列,就是屬性訪問器類型設置
選項:默認,Final,Get,GetSet
頂部設置修改,下面子項都會修改。你也能夠單獨對某個屬性進行設置。
點擊格式化以後,右邊會顯示可視化的json類結構。
第一列爲在json中對應的key
第二列爲屬性類型/類的名字。若是是類名,會用黃色背景提示
第三列是屬性的名字
輸入選項若是爲空,會報紅提示
作好設置以後,點擊生成Dart按鈕,左邊就會生成你想要的Dart代碼,而且提示「Dart生成成功,已複製到剪切板」,能夠直接複製到你的Dart文件裏面
是否是很方便很人性化,歡迎Start,Fork,666三連。
最後放上 Josn To Dart,若是你有什麼不明白或者對這個方案有什麼改進的地方,請告訴我,歡迎加入Flutter Candies,一塊兒生產可愛的Flutter 小糖果(QQ羣:181398081)
再次邀請,有心爲Flutter生態作貢獻的小夥伴加入Flutter Candies,一塊兒開心地寫bug。
最最後放上Flutter Candies全家桶,真香。