国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

flutter的入門實(shí)踐到可開發(fā)

_DangJin / 738人閱讀

摘要:繼上一篇關(guān)于的介紹,是仿照微信界面,因?yàn)樽鳛榍岸碎_發(fā),有一定的基礎(chǔ),所有寫起來,也不是很吃力。班門弄斧之作,若有大神見到,敬請(qǐng)指教,有不對(duì)不合理之處,敬請(qǐng)指出我是邇伶貳環(huán)境準(zhǔn)備以系統(tǒng)為例。

flutter的入門記錄 0.前言:

flutter 的入門demo 已經(jīng)寫好一個(gè)星期了,只不過一直都沒有整理出博客來。收拾好心情,來整理一下。
繼上一篇關(guān)于react-native-wx的介紹,是仿照微信界面ui,
因?yàn)樽鳛榍岸碎_發(fā),有一定的js 基礎(chǔ),所有寫起RN來,也不是很吃力。但是這個(gè)flutter 用的是一個(gè)新的語言 dart作為開發(fā)語言,沒有學(xué)習(xí)這個(gè)語言,但是不要怕,有開發(fā)文檔,一切都沒有那么難。這個(gè)flutter demo,雖然已經(jīng)寫了一個(gè)初步的demo,但是你要是問我,這個(gè)dart里面的具體的東西,我直言說,‘不會(huì)’(因?yàn)闆]有具體去學(xué)習(xí)這個(gè)語言,回過頭來說,若深入flutter,必學(xué)dart),我一路就是對(duì)著開發(fā)文檔和其他參考資料一路"CV"過來。不禁想起了這個(gè)圖片~


話不多說,也將繼續(xù)參考微信界面ui開發(fā),項(xiàng)目名稱為 flutter-wx,為了不增加這個(gè)入門體驗(yàn)demo的復(fù)雜度,只做了幾個(gè)基本功能頁(yè)面。項(xiàng)目地址: flutter-wx,歡迎查看!下面截圖如下:

文章內(nèi),圖片很多,占據(jù)了一定的篇幅。班門弄斧之作,若有大神見到,敬請(qǐng)指教,有不對(duì)不合理之處,敬請(qǐng)指出!我是邇伶貳!

1. 環(huán)境準(zhǔn)備
以mac 系統(tǒng)為例。

安裝xcode,這里主要使用的是xcode里面的ios模擬器,筆者不太喜歡用xcode,如何安裝,這里不做贅述;

使用flutter鏡像
編輯 .bash_profile, 往后追加以下,
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

獲取Flutter SDK

https://flutter.dev/docs/deve...

解壓SDK 壓縮包,將路徑寫入 .bash_profile

source ~/.bash_profile

檢查 flutter 環(huán)境
flutter doctor


上圖看出,flutter 需要的環(huán)境有的具有,有的不具有,不同的操作系統(tǒng)需要配備不同的軟件環(huán)境,我們這里是mac,用的是Xcode,因此,我們不需要安裝Android Studio,忽略第一條,按照第二條提示的安裝環(huán)境;

2. 軟件安裝

安裝編輯器vscode,這里使用vscode,

安裝vscode 插件flutter

3. 初始化項(xiàng)目
打開vscode, command+shift+p;


初始化之后,如下


debugger 模式下,跑起來:

4. 修改項(xiàng)目

新建文件夾 page, utils, page 下新建多個(gè)文件,一個(gè)文件表示一個(gè)頁(yè)面,utils 為工具函數(shù), main.dart 為項(xiàng)目的主入口。

5. 添磚加瓦
-- 組件封裝

網(wǎng)絡(luò)請(qǐng)求封裝:

    在utils 文件夾新建文件 HttpRequest.dart, 代碼寫入:
import "package:dio/dio.dart";
import "dart:async";

/*
 * 封裝 restful 請(qǐng)求
 * 
 * GET、POST、DELETE、PATCH
 * 主要作用為統(tǒng)一處理相關(guān)事務(wù):
 *  - 統(tǒng)一處理請(qǐng)求前綴;
 *  - 統(tǒng)一打印請(qǐng)求信息;
 *  - 統(tǒng)一打印響應(yīng)信息;
 *  - 統(tǒng)一打印報(bào)錯(cuò)信息;
 */
class HttpUtils {

  /// global dio object
  static Dio dio;

  /// default options
  static const String API_PREFIX = "http://18.10.1.115:4000";
  // static const String API_PREFIX = "http://api.wtodd.wang:4000";
  static const int CONNECT_TIMEOUT = 10000;
  static const int RECEIVE_TIMEOUT = 3000;

  /// http request methods
  static const String GET = "get";
  static const String POST = "post";
  static const String PUT = "put";
  static const String PATCH = "patch";
  static const String DELETE = "delete";

  /// request method
  static Future request (
    String url, 
    { data, method }) async {

    data = data ?? {};
    method = method ?? "GET";

    /// restful 請(qǐng)求處理   
    data.forEach((key, value) {
      if (url.indexOf(key) != -1) {
        url = url.replaceAll(":$key", value.toString());
      }
    });

    /// 打印請(qǐng)求相關(guān)信息:請(qǐng)求地址、請(qǐng)求方式、請(qǐng)求參數(shù)
    print("請(qǐng)求地址:【" + method + "  " + url + "】");
    print("請(qǐng)求參數(shù):" + data.toString());

    Dio dio = createInstance();
    var result;

    try {
      Response response = await dio.request(url, data: data, options: new Options(method: method));

      result = response.data;

      /// 打印響應(yīng)相關(guān)信息
      print("響應(yīng)數(shù)據(jù):" + response.toString());
    } on DioError catch (e) {
      /// 打印請(qǐng)求失敗相關(guān)信息
      print("請(qǐng)求出錯(cuò):" + e.toString());
    } 

    return result;
  }

  /// 創(chuàng)建 dio 實(shí)例對(duì)象
  static Dio createInstance () {
    if (dio == null) {
      /// 全局屬性:請(qǐng)求前綴、連接超時(shí)時(shí)間、響應(yīng)超時(shí)時(shí)間
      BaseOptions options = new BaseOptions(
          baseUrl: API_PREFIX,
          connectTimeout: CONNECT_TIMEOUT,
          receiveTimeout: RECEIVE_TIMEOUT,
      );

      dio = new Dio(options);
    }

    return dio;
  }

  /// 清空 dio 對(duì)象
  static clear () {
    dio = null;
  }

}

調(diào)用:
請(qǐng)求類型封裝

具體位置使用:

具體使用,不贅述,請(qǐng)查看相關(guān)代碼;
這里的接口調(diào)用依舊是nodejs 提供的接口, nodejsApi

頁(yè)面路由控制

目標(biāo)轉(zhuǎn)移到main.dart,這里是一個(gè)項(xiàng)目的主入口文件,為了不增加項(xiàng)目的復(fù)雜度,這里也將路由控制的相關(guān)代碼寫入。分步驟解釋如下:
導(dǎo)包:

注冊(cè)路由表:

底部導(dǎo)航顯示:

頭部及按鈕


頭部icon: Icon(Icons.add_circle_outline), 這里icon flutter 自帶了不少的圖標(biāo),可以自行選擇使用,地址:https://api.flutter.dev/flutt...

動(dòng)畫的實(shí)現(xiàn)

定義一個(gè)動(dòng)畫類

使用:


調(diào)用機(jī)器 照相機(jī)
安裝依賴

pubspec.yaml

在這個(gè)文件里面,只要寫入相關(guān)的package,編輯器vscode 會(huì)自動(dòng)下載。pub.dev, 這個(gè)dart語言的包整理平臺(tái),相當(dāng)于 我們熟知的 npm 網(wǎng)站,需要什么package,自己去找相關(guān)的api。
相機(jī)的調(diào)用,比較簡(jiǎn)單,flutter 提供了這個(gè)方法,我們只要按照api提示操作即可實(shí)現(xiàn)。
使用如下:

效果如下:

使用webview 安裝依賴,如上

代碼:

效果:

6.心得

強(qiáng)弱類型語言:我們常寫js這種弱類型語言,一上來看這個(gè)強(qiáng)類型的dart,未免會(huì)有點(diǎn)懵逼,個(gè)人認(rèn)為,學(xué)習(xí)語言應(yīng)該先把強(qiáng)類型語言打好基礎(chǔ),如C java,會(huì)一個(gè)js,以后看別的語言會(huì)有局限性;
flutter的語法嵌套: 雖然說方法里面嵌套方法,寫起來感覺好難受,項(xiàng)目復(fù)雜了,編輯器橫向的還會(huì)出現(xiàn)滾動(dòng)條,vscode 針對(duì)這點(diǎn)也做了友好性的提示,防止多層括號(hào)讓人眼迷,估計(jì)是在vscode 的flutter 插件中植入的;但是,也是因?yàn)檫@樣多級(jí)自由的嵌套,提供了一個(gè)很靈活的方案,一個(gè)布局多種方案,可以用不同的widget實(shí)現(xiàn),同時(shí),這就要多學(xué)習(xí)幾個(gè)widget,省的像我們web “一個(gè)div打天下”的單一解決方案。

7. TODO

使用websocket,搭建聊天系統(tǒng);

通訊錄頁(yè)面,分組歸類,這個(gè)主要得是后端接口來完成;

上拉下拉的手勢(shì)動(dòng)作;

。。。

9. 參考文章

入門介紹
flutter中文網(wǎng)
圖標(biāo)檢索
導(dǎo)航示例
dart package
視頻課程講解

flutter 新手,班門弄斧之demo,若有大神見到,敬請(qǐng)指教,有不對(duì)不合理之處,敬請(qǐng)指出!我是邇伶貳!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/19580.html

相關(guān)文章

  • Android程序員完全沒時(shí)間提升自己怎么辦?

    摘要:昨天有個(gè)小學(xué)弟給我發(fā)來微信,說他現(xiàn)在有點(diǎn)后悔選擇開發(fā)了,月月光不說,還加班特別嚴(yán)重,平時(shí)也沒有屬于自己的時(shí)間去學(xué)習(xí),問我剛畢業(yè)的時(shí)候是不是這樣。每天回到出租屋都是倒頭就睡,非常累,也沒有其他時(shí)間提升自己的技術(shù)。 昨天有個(gè)小學(xué)弟給我發(fā)來微信,說他現(xiàn)在有點(diǎn)后悔選擇Android開發(fā)了,月月光不說...

    kohoh_ 評(píng)論0 收藏0
  • Android程序員到底有多累,多辛苦?

    摘要:其實(shí),這種時(shí)候,需要做的是馬上買空氣凈化器,任何一款都好,哪怕是凈化能力差一點(diǎn)的,也能解決當(dāng)前的主要問題,更好的凈化器帶給你的凈化效果的提升,不過是多一點(diǎn)邊際收益。 前言 說到底,是自己的選擇問題。 三百六十行,哪行容易? 但關(guān)鍵是自己的心態(tài),如果工作成了你的負(fù)擔(dān)和困擾,你得有跳出來的...

    adam1q84 評(píng)論0 收藏0
  • 前端每周清單第 53 期:Go 與 WebAssembly, React Suspense 演練,

    摘要:開發(fā)教程步步為營(yíng),掌握基礎(chǔ)技能發(fā)布機(jī)器學(xué)習(xí)速成課程為了幫助更多的人了解與學(xué)習(xí)機(jī)器學(xué)習(xí)相關(guān)的知識(shí)技能,發(fā)布了人工智能學(xué)習(xí)網(wǎng)站。更多相關(guān)內(nèi)容參考數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)手冊(cè)。 showImg(https://segmentfault.com/img/remote/1460000013586587); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱...

    lbool 評(píng)論0 收藏0
  • Flutter基礎(chǔ)(三)Dart快速入門

    摘要:工具可以報(bào)告兩種問題警告和錯(cuò)誤。警告只是說明代碼可能無法正常工作,但不會(huì)阻止程序執(zhí)行。中的是一組無序的集合。其中來指定異常類型,來捕獲異常對(duì)象。其中代表只導(dǎo)入指定的部分,代表除了指定的部分都導(dǎo)入。 本文首發(fā)于微信公眾號(hào)「劉望舒」 前言 Dart是Flutter SDK指定的語言,因此要學(xué)習(xí)Flutter,Dart是必須掌握的。關(guān)于Dart可以寫一本書了,這里用一篇文章來介紹下Dart的精...

    helloworldcoding 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<