Flutter開發移動端APP的入門教程及簡單介紹


Dart&Flutter環境搭建

安裝 dart SDK 如果只開發移動應用,那么您不需要Dart SDK; 只需安裝Flutter。

這里就直接安裝 Flutter (dart SDK已經集成在Flutter中) 由於在國內訪問Flutter有時可能會受到限制,Flutter官方為中國開發者搭建了臨時鏡像,大家可以將如下環境變量加入到用戶環境變量中:

export PUB_HOSTED_URL=https://pub.flutter-io.cn

export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

下載地址 : https://flutter.dev/docs/development/tools/sdk/releases?tab=macos#macos

配置環境變量:

export PATH=`pwd`/flutter/bin:$PATH(添加路徑)

export PATH=/Users/mugong/Desktop/workspace/flutter/bin:$PATH(這 是我的)

 

安裝 Xcode 或者 Android Studio (我安裝的Android Studio)

運行 flutter doctor

 

vs code (我的編輯器)

調用 View>Command Palette… 輸入 ‘install’, 然后選擇 Extensions: Install Extension action

在搜索框輸入 flutter , 在搜索結果列表中選擇 ‘Flutter’, 然后點擊 Install 選擇 ‘OK’

重新啟動 VS Code

Android Studio Flutter插件 , Dart插件

 

創建一個新flutter應用

在終端 輸入 flutter run 在 initState函數中打印出hello world!至此flutter框架已經搭建完成。

Dart 語言 數據類型

dart語言提供所有現代語言提供的所有基本數據類型。

Numbers int 和 double

Strings

Booleans

Lists

Maps Map 是一個鍵值對相關的對象

int x = 100; double y = 1.1;

String s = 'This is a string';

bool isDoorOpen = false;

list list= [1,2,3,4];

map map= { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' };

目前Dart中int和double是num的子接口,所以聲明變量類型時可以使用num來替代int或double.

flutter 布局思路

參考文檔: https://flutterchina.club/tutorials/layout/#approach

 

常見布局widgets

1.多個子元素的布局 Row 、Column、Stack 等

2. 單個 子元素的布局Container 、 Padding 、Center 等

Row :控件來水平排列子控件.

Column: 控件垂直排列子控件.

Container : 給一個組件添加 padding, margins, 邊界(borders), 背景顏色或其它裝飾(decorations)。

Stack : 在一個widget上面蓋上另一個widget。

ListView : ListView能以列的形式展示數據。當內容超過渲染范圍時,自動提供滾動的功能。

Center :在一個widget 中居中顯示。
Padding:給子節點設置padding屬性,設置內邊距屬性, (Flutter中並沒有單獨的Margin控件)。

Text: 顯示“ 文本”單個樣式的文本字符串小組件。

有狀態組件(Stateful widget)與 無狀態組件(StatelessWidget)

無狀態組件(stateless widget),無狀態組件不提供可變狀態維護,無狀態組件僅根據其屬性來渲染, 無狀態組建的寫法:

class MyToolBar extends StatefulWidget{

    MyToolBar({ this.title }); final Widget title)

    Widget build(BuildContext context){

    return new Container( child: new Row([ new IconButton(icon: 'navigation/menu'), ]) );

 }

}

 

有狀態組件(stateful Widget),組件自己維護狀態,組件渲染由SetState方法調用,更具state的變化差異來更新渲染。所有的stateful widget都是建立在stateless widget上的。

class Counter extends StatefulWidget {

      _CounterState createState() => new _CounterState();

}

class _CounterState extends State<Counter> {

       int _count = 0;

       void _increment() {

          setState(() { ++_count; });

      }

    Widget build(BuildContext context) {

        return new Container(

           child: new Center(

                child: new RaisedButton(

                onPressed: _increment,

               child: new Text('click count : ${_count}'))));

    }

}

Flutter的父子通信

父組件向子組件傳值

父組件

String modelKey='';

new Container( child:Input({modelKey: modelKey}) }

子組件

Input({modelKey:this.modelKey})

     Input extends StatelessWidget {

     final modelKey;

     Input ({modelKey:modelKey});

     Widget build(BuildContext context) { }

}

子組建向父組建傳值

父組件

void onDataChange(val) { setState(() { data = val; });

 new ChildTwo(data4Two: data4Two, callback: (val) => onDataChange(val)),

子組件

class ChildTwo extends StatefulWidget {

      ChildTwo({data4Two: this.data4Two,callback: this.callback})

      final callback; String data4Two;

       child: new Center( onPressed: callback('111111111'), child: new Text('to父組件') )

}

第三方庫的下載

在 pubspec.yaml

    dependencies:

          flutter: sdk:

              flutter

          cupertino_icons: ^0.1.0

          english_words: ^3.1.0

  拉取聲明的第三方庫到本地工程 flutter packages get 注意 :yaml配置文件對於縮進要求十分嚴格!!!!!!!

   import 'package:flutter/material.dart';

    import 'package:english_words/english_words.dart';


flutter 中從接口中取到的數據要進行反json序列化

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM