欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

flutterinit,flutterinitstate重復(fù)執(zhí)行

flutter_bloc使用解析

初始化問(wèn)題:這邊初始化是在bloc里,直接在構(gòu)造方法里面賦初值的,state中一旦變量多了,還是這么寫(xiě),會(huì)感覺(jué)極其難受,不好管理。需要優(yōu)化

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。創(chuàng)新互聯(lián)推出徐州免費(fèi)做網(wǎng)站回饋大家。

如果進(jìn)行一個(gè)頁(yè)面,需要進(jìn)行復(fù)雜的運(yùn)算或者請(qǐng)求接口后,才能知曉數(shù)據(jù),進(jìn)行賦值,這里肯定需要一個(gè)初始化入口,初始化入口需要怎樣去定義呢?

首先對(duì)state進(jìn)行優(yōu)化,新增倆個(gè)方法:init()和clone()

init():這里初始化統(tǒng)一用init()方法去管理。

clone():這邊克隆方法,是非常重要的,一旦變量達(dá)到倆位數(shù)以上,就能深刻體會(huì)該方法是多么的重要。

定義一個(gè)與初始化state相對(duì)應(yīng)的init()初始化方法

這增加了初始化方法,請(qǐng)注意,如果需要進(jìn)行異步請(qǐng)求,同時(shí)需要將相關(guān)邏輯提煉一個(gè)方法,咱們?cè)谶@里配套Future和await就能解決在異步場(chǎng)景下同步數(shù)據(jù)問(wèn)題.

這里使用了克隆方法,可以發(fā)現(xiàn),我們只要關(guān)注自己需要改變的變量就行了,其它的變量都在內(nèi)部賦值好了,我們不需要去關(guān)注;這就大大的便捷了頁(yè)面中有很多變量,只需要變動(dòng)一倆個(gè)變量的場(chǎng)景。

view層增加了個(gè)初始化事件。初始化操作直接在創(chuàng)建的時(shí)候,在XxxBloc上使用add()方法就行了,就能起到進(jìn)入頁(yè)面,初始化一次的效果。

bloc的思想

觀察者模式的思想;觀察者(回調(diào)刷新控件)和被觀察者(產(chǎn)生相應(yīng)事件,添加事件,去通知觀察者),bloc層是處于觀察者和被觀察者中間的一層,我們可以在bloc里面搞業(yè)務(wù),搞邏輯,搞網(wǎng)絡(luò)請(qǐng)求;拿到Event事件傳遞過(guò)來(lái)的數(shù)據(jù),把處理好的、符合要求的數(shù)據(jù)返回給view層的觀察者就行了。

Flutter初始化

新建一個(gè)Flutter工程,android模塊。

1,只有一個(gè)Activity組件,它是Dart層繪制Widget的容器。

2,Application配置FlutterApplication。

應(yīng)用Application配置io.flutter.app.FlutterApplication類(lèi),App首次啟動(dòng)時(shí),初始化。

調(diào)用FlutterMain.startInitialization()方法。

initConfig方法,從AndroidManfest.xml配置的applicaion節(jié)點(diǎn)獲取meta-data數(shù)據(jù),初始化以下默認(rèn)值。

這些值都是使用中用到的name,例如,抽取apk中asset資源時(shí),flutter_assets打包目錄,打包產(chǎn)物data名稱(chēng)。

initResources方法, 初始化資源。

在Flutter打包apk的asset目錄下,包括fluttter_asset目錄/資源項(xiàng),將資源從apk中抽取,保存在 Context.getDir("flutter", 0) 目錄下。

/data/user/0/包名/app_flutter目錄。

在目錄中創(chuàng)建一個(gè)時(shí)間戳文件,根據(jù)apk版本和包信息記錄的lastUpdateTime更新時(shí)間,第二次啟動(dòng)時(shí),若apk未更新,不需要再次抽取。

加載so庫(kù),libflutter.so,System.loadLibrary()。

主頁(yè)面繼承FlutterActivity,配置啟動(dòng)模式singleTop。

FlutterActivity類(lèi)在io.flutter.app包, (區(qū)別io.flutter.embedding.android包), 組件生命周期委托給FlutterActivityDelegate類(lèi)。

組件啟動(dòng),onCreate方法。

FlutterMain.ensureInitializationComplete方法,確保資源成功抽取完成,創(chuàng)建FlutterView視圖(io.flutter.view),繼承SurfaceView類(lèi),setContentView方法,設(shè)置組件主布局即FlutterView視圖。

最后,根據(jù)Bundle路徑,runBundle()加載運(yùn)行,

調(diào)用FlutterView的runFromBundle方法,入口點(diǎn)在dart的main方法,

通過(guò)FlutterNativeView,調(diào)用FlutterJNI的native方法。

nativeRunBundleAndSnapshotFromLibrary方法。

任重而道遠(yuǎn)

Flutter 本地緩存

Flutter本地存儲(chǔ)可以用 shared_preferences ,其會(huì)根據(jù)不同操作系統(tǒng)進(jìn)行相對(duì)應(yīng)的存儲(chǔ)。

在pubspec.yaml添加

`shared_preferences: ^2.0.13`

```d

import 'package:shared_preferences/shared_preferences.dart';

class SpUtils {

SharedPreferences?prefs;

SpUtils._() {

init();

}

static SpUtils?_instance;

static preInit() {

_instance ??=SpUtils._();

}

static SpUtilsgetInstance() {

_instance ??=SpUtils._();

return _instance!;

}

void init()async {

prefs ??=await SharedPreferences.getInstance();

}

setString(String key, String value) {

prefs!.setString(key, value);

}

setDouble(String key, double value) {

prefs!.setDouble(key, value);

}

setInt(String key, int value) {

prefs!.setInt(key, value);

}

setBool(String key, bool value) {

prefs!.setBool(key, value);

}

setStringList(String key, List value) {

prefs!.setStringList(key, value);

}

clear(String key){

prefs!.remove(key);

}

clearAll(){

prefs!.clear();

}

Tget(String key) {

return prefs!.get(key)as T;

}

}

```

在項(xiàng)目初始頁(yè)調(diào)用

`SpUtils.preInit();`

`SpUtils.getInstance().setString('userId', '12345678');`

`SpUtils.getInstance().setDouble('price', 12.88);`

`SpUtils.getInstance().setInt('count', 200);`

`SpUtils.getInstance().setBool('flag', true);`

`SpUtils.getInstance().get('userId');`

`SpUtils.getInstance().clearAll();`

`SpUtils.getInstance().clear('userId');`

分享名稱(chēng):flutterinit,flutterinitstate重復(fù)執(zhí)行
本文鏈接:http://chinadenli.net/article33/dsipgps.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站域名注冊(cè)網(wǎng)站排名品牌網(wǎng)站制作企業(yè)建站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名