Flutter-從入門到項(xiàng)目 03: Flutter初體驗(yàn)

Flutter 專題目錄匯總: 這個(gè)目錄方便大家快速查詢你要學(xué)習(xí)的內(nèi)容!!!

??一、創(chuàng)建一個(gè)Flutter 工程??

下面我們通過(guò) Android Studio 安裝的 Flutter插件 創(chuàng)建 Flutter 工程

Android Studio 主界面 -> Create Flutter Project

說(shuō)明: ??上面截圖的四個(gè)功能

  • Flutter Application : 創(chuàng)建一個(gè) Flutter 應(yīng)用工程
  • Flutter plugin : 這是為了給 AndroidiOS 提供插件應(yīng)用(暴露的借口)的時(shí)候使用
  • Flutter Package : 創(chuàng)建一個(gè) Dart組件 發(fā)布到 pub 來(lái)提供便捷開發(fā) 類似一些三方庫(kù)
  • Flutter Module : 一般用來(lái)做混合開發(fā),嵌入到 AndroidiOS 工程當(dāng)中!

創(chuàng)建完畢我們就可以初體驗(yàn)運(yùn)行一下 感受一下 Flutter 經(jīng)典默認(rèn)頁(yè)面

??二、Flutter 聲明式語(yǔ)法??

  • 命令式編程:命令“機(jī)器”如何去做事情(how),這樣不管你想要的是什么(what),它都會(huì)按照你的命令實(shí)現(xiàn)。
  • 聲明式編程:告訴“機(jī)器”你想要的是什么(what),讓機(jī)器想出如何去做(how)。

可能你這里通過(guò)這個(gè)還是無(wú)法明白什么是 命令式編程 什么是 聲明式編程 我們以一個(gè)視圖UI 做為??說(shuō)明一下

首先我們看看 命令式編程 的代表 : Object-C

    UIView *view = [[UIView alloc] init];
    view.frame   = self.view.bounds;
    view.backgroundColor = [UIColor orangeColor];

我們要告訴“機(jī)器”: view的布局是 self.view.bounds view的背景色是 orangeColor
如果需要改變視圖,你通常需要使用選擇器 findViewById 或類似函數(shù)獲取到 ViewB 的實(shí)例 view 和所有權(quán),并調(diào)用相關(guān)的修改的方法(并隱式的使其失效)

   view.backgroundColor = [UIColor blueColor];

由于 UI 真實(shí)的來(lái)源可能比實(shí)例 view 本身的存活周期更長(zhǎng),你可能還需要在 view 的構(gòu)造函數(shù)中復(fù)制此配置

在聲明式風(fēng)格中,視圖配置(如 FlutterWidget )是不可變的,它只是輕量的“藍(lán)圖”。要改變 UI,widget 會(huì)在自身上觸發(fā)重建(在 Flutter 中最常見的方法是在 StatefulWidgets 組件上調(diào)用 setState())并構(gòu)造一個(gè)新的 Widget 子樹。

// Declarative style
return ViewB(
  color: red,
  child: ViewC(...),
)

很明顯兩個(gè)模式側(cè)重的點(diǎn)是完全不一樣的! 如果還有不太理解的, 不妨都看兩遍就會(huì)有感覺(jué)了!!!

??三、Flutter 工程初體驗(yàn)??

對(duì)上面聲明式語(yǔ)法有一定的理解之后,我們開始玩玩代碼,首先默認(rèn)工程你可能看懂代碼,但是只是一層粗略的看,現(xiàn)在我們學(xué)習(xí),不防一點(diǎn)一點(diǎn)來(lái)! 先干掉整個(gè)程序一些代碼,留下??

接下來(lái)我們開始編寫一個(gè)簡(jiǎn)單的代碼

??① flutter 文本組件體驗(yàn)??

// 導(dǎo)入系統(tǒng)包 : 作用類似 #import <UIKit/UIKit.h>
import 'package:flutter/material.dart';

// 程序運(yùn)行的 main 函數(shù) (入口0
void main() {
  // 應(yīng)用程序運(yùn)行的函數(shù) 類比: UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  // 因?yàn)樵?Flutter 世界里面 都是各種部件
  // 這里我們簡(jiǎn)單使用一下 Center 來(lái)寫一個(gè) 文本
  runApp(Center(
      child: Text(
    '和諧學(xué)習(xí),不急不躁', // 文本
    textDirection: TextDirection.ltr, // 對(duì)齊方式
    style: TextStyle(
      fontSize: 40.0, // 字體大小
      color: Colors.red, // 紅色字體
      fontWeight: FontWeight.w400, // 字體的粗細(xì)
    ),
  )));
}

是不是感覺(jué)很清爽, Flutter 本身在編寫代碼還是比較輕松的, 畢竟有沒(méi)有發(fā)現(xiàn)這樣的語(yǔ)法結(jié)構(gòu)越來(lái)越趨于 大前端一統(tǒng)...

??② flutter 導(dǎo)航欄體驗(yàn)??

class KCBar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold( // 類似 nav
        appBar: AppBar( // 導(dǎo)航欄
          title: Text('KCFlutterBar',style: TextStyle(color: Colors.white),),
        ),
        body: KCWidget(),
        floatingActionButton: FloatingActionButton(),
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling,
      ),
      theme: ThemeData(
        primaryColor: Colors.orange
      ),
    );
  }
}

下面我們看看顯示的效果,還是比較 OK!

聰明的你們估計(jì)寫到你就會(huì)發(fā)現(xiàn) 編碼還是有點(diǎn)不太適應(yīng). 我這里給大家推薦幾個(gè)快捷鍵,方便大家快速優(yōu)美編程

  • Command + o : 全局搜索
  • command + option + l : 格式化代碼
  • command + l : 注釋代碼
  • command + - : 折疊和展開代碼
  • command + [ : 代碼返回
  • command + ] : 代碼前進(jìn)
  • cmd + C / cmd + delete : 刪除行
  • ctr + alt + I: 自動(dòng)縮進(jìn)對(duì)齊
  • opt + sft + up/down : 上下移動(dòng)代碼
  • ctrl + tab: 切換文件
  • shift + command + enter : 行尾自動(dòng)添加分號(hào),if后面自動(dòng)加“(){ }”
  • cmd + N : 快速生成getter/setter方法,構(gòu)造方法,toString()方法等
  • cmd + J : 快速生成模版代碼塊,如if,while,return
  • opt + cmd + T : Surround with快速調(diào)出if,for,try…catch,while等環(huán)繞代碼
  • opt + ctr + o: 刪除未使用的import
  • option + enter: 自動(dòng)導(dǎo)入用到的包
  • stless: 創(chuàng)建新的 StatelessWidget
  • stful: 創(chuàng)建新的 StatefulWidget

??③ flutter listView 列表界面??

class KCListView extends StatelessWidget {

  Widget _itemForRow(BuildContext context, int index) {
    return Container(
      color: Colors.white,
      margin: EdgeInsets.fromLTRB(10, 10, 10, 10),
      child: Column(
        children: <Widget>[
          Image.network(carDatas[index].imageUrl),
          SizedBox(height: 10),
          Text(
            carDatas[index].name,
            style: TextStyle(
                fontSize: 18.0,
                fontWeight: FontWeight.w800,
                fontStyle: FontStyle.values[1]),
          ),
          SizedBox(height: 10),
        ],
      ),
    );
  }
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemBuilder: _itemForRow,
      itemCount: carDatas.length,
    );
  }
}

通過(guò)導(dǎo)航欄樣式加載列表結(jié)構(gòu), 從而加載數(shù)據(jù)其實(shí)如果你跟著寫到這里應(yīng)該很容易可以感受到聲明式語(yǔ)法的魅力! 只有你掌握這種寫法 再加上以前對(duì)UI布局的理解就很容易寫出應(yīng)用 (?? 彈性盒子布局 Flex ??)

這里就只貼出一些需要感受的代碼 如果你也對(duì)著敲一敲代碼,可以移步到 github: Flutter專欄代碼 這里面紀(jì)錄整個(gè)專欄的代碼 一直保持更新 喜歡的可以點(diǎn)贊??收藏

??四、總結(jié)??

這一篇關(guān)于 Flutter 的初體驗(yàn)可能因?yàn)槟氵€只是一個(gè) Flutter小白 感受不強(qiáng),但是沒(méi)有關(guān)系 多敲敲就有感受了,這個(gè)東西真心的敲得越多越有感受,最好敲出肌肉記憶! Flutter 的代碼的簡(jiǎn)潔性還是很強(qiáng)的.你會(huì)慢慢愛上敲 Flutter代碼的!

來(lái)吧! 我們一起敲Flutter : github: Flutter專欄代碼

下一篇開始我們會(huì)切入到 Flutter細(xì)節(jié)! 點(diǎn)贊收藏不迷路哦

干貨地址:喜歡可以一鍵三連

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容