上午第一件事情是使用外部包解析json
我用的是win 7 專業(yè)版
官方解釋是PowerShell版本太低 但是我這個版本又更新不了這個東東 只能放棄了
但是在官方文檔中還有一個built_value庫
先講講json序列化的幾種方法
Dart 團隊和社群對 JSON 已進行過諸多討論坎吻,并且能夠提供解決方案解总。我會按照復(fù)雜性從低到高的順序介紹三種解決方案晓铆,分別是手寫構(gòu)造函數(shù)勺良、json_serializable 和 built_value。
使用全部三種方法將數(shù)據(jù)反序列化的調(diào)用非常相似骄噪。手寫構(gòu)造函數(shù)和 json_serializable 的代碼行如下所示:
final myObject = SimpleObject.fromJson(json.decode(aJsonString));
built_value 的反序列化調(diào)用如下所示:
final myObject = serializers.deserializeWith(
SimpleObject.serializer, json.decode(aJsonString));
真正的區(qū)別是尚困,在該 “SimpleObject” 類中為您生成多少代碼,以及這些代碼有何作用链蕊。
手寫構(gòu)造函數(shù)
復(fù)雜性最低的方法:不為您生成代碼尾组。
您可以做自己想做的任何事,但您必須進行維護示弓。
json_serializable
為您生成 fromJson 構(gòu)造函數(shù)和 toJson 方法。
在構(gòu)建應(yīng)用之前呵萨,您需要在項目中加入若干個包奏属,并使用 source_gen 生成部分文件。
對所生成的資源進行自定義可能會很棘手
built_value
為序列化潮峦、不可變性囱皿、toString 方法、hashCode 屬性等生成代碼忱嘹。這是具備諸多功能的重量級解決方案嘱腥。
與 json_serializable 一樣,您需要導(dǎo)入許多包并使用 source_gen拘悦。
擁有基于插件的可擴展序列化架構(gòu)齿兔。
對實例創(chuàng)建和可變性等方面有見解。
您適合使用哪個內(nèi)容庫其實取決于項目詳情础米,特別是項目大小和狀態(tài)管理方法分苇。對擁有一位維護者的興趣項目來說,手寫構(gòu)造函數(shù)很有幫助屁桑,而由龐大分布式團隊(他們需要不可變模型來保持邏輯清晰)構(gòu)建的應(yīng)用則會真正從 “built_value” 受益医寿。
看到這里我想我還是用手寫構(gòu)造函數(shù)的方式把 這樣方便維護
今天就到這里 我們明天再見
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
怎么可能 要把這東西搞完啊
我們繼續(xù)
第一種方式很簡單 開發(fā)過Android 或者是iOS都很容易的 第二種網(wǎng)上的教程太多了 而且我自己也沒有搞定 就不說了 重點說第三種
built_value
built_value(及其合作伙伴包 built_collection)遠遠不只是自動序列化邏輯解決方案,其設(shè)計目的是幫助您創(chuàng)建充當值類型的數(shù)據(jù)類蘑斧。為此靖秩,使用 built_value 創(chuàng)建的數(shù)據(jù)類實例是不可變的。您可以創(chuàng)建新實例(包括現(xiàn)有實例的副本)竖瘾,但一旦構(gòu)建好實例沟突,便無法更改其屬性。
為做到這一點准浴,built_value 使用在 json_serializable 中找到的相同源生成方法事扭,但會創(chuàng)建更多代碼。在為 built_value 類所生成的文件中乐横,您會發(fā)現(xiàn):
一個等式 (==) 運算符
一個 hashCode 屬性
一個 toString 方法
一個序列化器類(如果您想要一個)求橄,下文會介紹更多相關(guān)內(nèi)容
一個用于創(chuàng)建新實例的“構(gòu)建器”類
即使是一個很小的小類今野,加起來也有幾百行,所以我不會在此贅述罐农。實際類文件(您作為開發(fā)者編寫的文件)如下所示:
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'simple_object.g.dart';
abstract class SimpleObject
implements Built<SimpleObject, SimpleObjectBuilder> {
static Serializer<SimpleObject> get serializer =>
_$SimpleObjectSerializer;
@nullable
String get aString;
@nullable
int get anInt;
@nullable
double get aDouble;
@nullable
BuiltList<String> get aListOfStrings;
@nullable
BuiltList<int> get aListOfInts;
@nullable
BuiltList<double> get aListOfDoubles;
SimpleObject._();
factory SimpleObject([updates(SimpleObjectBuilder b)]) =
_$SimpleObject;
}
所以還是如果不是寫的很大的項目的花還是建議使用第二種方法
這個文件與我們一開始使用的 SimpleObject 版本的區(qū)別在于:
像 json_serializable 一樣聲明 part 文件条霜。
實行界面 Built<SimpleObject, SimpleObjectBuilder>。
添加了針對序列化器對象的靜態(tài) getter涵亏。
所有字段上都有是否為 Null 的注解宰睡。這些注解是可選項,但為了讓此示例與其他相關(guān)示例匹配气筋,我進行了添加拆内。
添加了兩個構(gòu)造函數(shù)(一個不公開函數(shù),一個工廠函數(shù))宠默,并移除原來的函數(shù)麸恍。
SimpleObject 現(xiàn)在是抽象類了!
這個文件與我們一開始使用的 SimpleObject 版本的區(qū)別在于:
我們先看最后一點:SimpleObject 已變成抽象類搀矫。在所生成的文件中抹沪,built_value 定義了名為 _ SimpleObject。但您永遠不需要按派生類型引用它瓤球,因此您的應(yīng)用代碼仍會使用 SimpleObject 來聲明和使用引用內(nèi)容融欧。
這是有可能實現(xiàn)的,因為您已經(jīng)通過所生成的工廠構(gòu)造函數(shù)完成對全新 SimpleObject 的實例化卦羡。您可以在上方文件的最后一行看到對其的引用噪馏。要開始使用,您需要傳入一個方法虹茶,該方法在 SimpleObjectBuilder(即下方的“b”參數(shù))上設(shè)置屬性逝薪,并為您構(gòu)建不可變對象實例
這里不做過多的贅述 有興趣的小伙伴可以看看 這篇文章
插曲
之前寫的屏幕適配 因為有個九宮格(就一行 三個圖片)出現(xiàn)了問題 在像素點比例不一樣的地方匹配不了 又搞了一些時間
終于搞定了 記錄下
double jian = ScreenUtil.pixelRatio * 34;//臥槽 終于搞定了 思路: 三張圖片 相互的間隔和邊框的間隔的和是 34 按照像素點來計算的話是 ScreenUtil.pixelRatio * 34
double temp = (ScreenUtil.screenWidth - jian) / 3;// 然后使用外部包(因為一直使用的是外部包 所以最好都使用外部包)的屏幕總寬度 減去間隔總和 除以3
double width = temp / ScreenUtil.pixelRatio;//但是這個時候計算出來的是像素的寬度 所以還要除以像素比 才能正確的計算出寬度
分享到第三方
因為我用的是windows電腦 所以先寫Android
微信分享的第一件事情是干啥 請大聲的告訴我!!!!
對的 是在微信平臺上申請應(yīng)用
那么就需要簽名
簽名就需要簽名文件
簽名文件怎么生成呢
keytool -genkey -alias name.keystore -keyalg RSA -validity 36500 -keystore name.keystore
然后查看簽名
keytool -list -v -keystore name.keystore
好了 我下面來跟大家分享下我是如何集成微信分享的
1.上面說過了 申請APP 生成簽名等等
2.安裝外部包
pubspec.yaml
fluwx: ^0.6.3
有興趣的小伙伴可以去github查看
3.導(dǎo)入包
import 'package:fluwx/fluwx.dart' as fluwx;
import 'package:fluwx/fluwx.dart';
4.注冊
Fluwx.register(appId: "",doOnIOS: true,doOnAndroid: true);
盡管可以通過Fluwx完成微信注冊,但一些操作依然需要在對應(yīng)平臺進行設(shè)置蝴罪,如配置iOS的URLSchema董济,Android上的WXEntryActivity等。
5.分享
fluwx.share(WeChatShareTextModel(
text: "text from fluwx",
transaction: "transaction}",//僅在android上有效要门,下同虏肾。
scene: WeChatScene.SESSION
));
///[WeChatScene.SESSION]會話
///[WeChatScene.TIMELINE]朋友圈
///[WeChatScene.FAVORITE]收藏
enum WeChatScene {
SESSION,
TIMELINE,
FAVORITE
}
分享文本
fluwx.share(WeChatShareTextModel(
text: "text from fluwx",
transaction: "transaction}",//僅在android上有效,下同欢搜。
scene: scene
));
分享圖片
fluwx.share(WeChatShareImageModel(
image: _imagePath,
thumbnail: _thumbnail,
transaction: _imagePath,
scene: scene,
description: "image"));
注意:如果不指定
thumbnail
封豪,那么Fluwx
將嘗試從image
中獲取縮略圖。
分享音樂
var model = WeChatShareMusicModel(
title: _title,
description: _description,
transaction: "music",
musicUrl: _musicUrl,
musicLowBandUrl: _musicLowBandUrl
);
fluwx.share(model);
音樂的分享有兩種:musicUrl
和musicLowBandUrl
炒瘟。這兩種形式是不共存的吹埠,如果 都二者都進行了賦值,那么只會讀取musicUrl
。
分享視頻
var model = new WeChatShareVideoModel(
videoUrl: _videoUrl,
transaction: "video",
videoLowBandUrl: _videoLowBandUrl,
thumbnail: _thumnail,
description: _description,
title: _title
);
fluwx.share(model);
視頻的分享有兩種:videoUrl
和videoLowBandUrl
缘琅。這兩種形式是不共存的粘都,如果 都二者都進行了賦值,那么只會讀取videoUrl
刷袍。
分享小程序
var model =new WeChatShareMiniProgramModel(
webPageUrl: _webPageUrl,
miniProgramType: fluwx.WXMiniProgramType.RELEASE,
userName: _userName,
title: _title,
description: _description,
thumbnail: _thumbnail
);
fluwx.share(model);
.
.
.
2019-07-03日更
我微信分享得時候 在我手機上顯示的是報名不對 但是在同事手機上顯示的是可以分享的
初步認為 解決方式2 可以解決 因為之前在使用微信分享得時候出現(xiàn)過這種問題
官方給出的幾種問題
- 微信是否安裝
- 調(diào)用時的Apk包名和簽名是否與開放平臺填寫的一致翩隧,簽名請使用該工具:點擊下載,常發(fā)生在安裝了debug版本又安裝release版本情況呻纹,確定包名簽名后卸載微信重裝或者清除微信數(shù)據(jù)再做測試
- 檢查發(fā)送時的縮略圖大小是否超過32k
- 能夠調(diào)起微信到選擇好友列表堆生,但是點擊發(fā)送后無響應(yīng),請檢查proguard配置是否對微信SDK代碼進行了混淆雷酪,建議不要對SDK對混淆淑仆,參考以下proguard配置:
.
.
.
2019-07.08日更
分享到網(wǎng)站
Fluwx.share(Fluwx.WeChatShareWebPageModel(
webPage: 網(wǎng)頁地址,
title: 標題,
description: 描述信息,
thumbnail: 圖片地址,
scene:分享到: 朋友圈 會話 收藏
));