1.Expanded組件 占滿可用空間 -----可以到達類似flex布局中 第一列占用大量空間,所以它必須包裝在Expanded widget中。
寫死的高度改成Expanded自動撐滿屏幕如果還是不能撐滿試試加上flex:1的屬性
Expanded expands its child to fill the available space --Using an Expanded widget makes a child of a Row, Column, or Flex expand to fill the available space in the main axis (e.g., horizontally for a Row or vertically for a Column). If multiple children are expanded, the available space is divided among them according to the flex factor.
2.如何改變text組件的高度:可以直接給height (單位感覺像字體單位)或者外面包一個容器
3.Text組件中文本居中 textAlign: TextAlign.center,
4.Container如果不設置寬度 寬度則由內容撐起了 背景色設置 color: Colors.pink,
無法設置背景色的組件 可以給他包一個Container容器再設置
邊框屬於修飾的屬性需要在decoration中定義
5.使用Stack來組織需要重疊的widget。widget可以完全或部分重疊底部widget。類似於css中的
6.DefaultTextStyle.merge可以允許您創建一個默認的文本樣式,該樣式會被其
// 所有的子節點繼承
7.什么是無狀態組件、有狀態組件?
1)如果用戶與widget交互,widget會發生變化,那么它就是有狀態的.----
stateless widget 沒有內部狀態. Icon、 IconButton, 和Text 都是無狀態widget, 他們都是 StatelessWidget的子類。
它不依賴於除了傳入的數據以外任何其他數據,意味着改變傳入其構造函數的參數是改變其顯示的唯一方式
2)stateful widget 是動態的. 用戶可以和其交互
如果動態組件中的變量有變化請外面套一個setState(() { _favoriteCount -= 1; }
------>無狀態組件類似react中的純組件
無狀態組件里面child居然可以有狀態組件。。。。。widget管理自己的狀態時
8.flutter傳遞參數到子組件時,參數要給類型,只傳值會提示少參數類型Too many positional arguments: 0 expected, but 1 found.
9.Future類型的函數類似於js中的promise 返回值可以使用then
10.拿到后台接口的數據后如果像js中通過遍歷、屬性訪問等方式使用數據
方法1:as List).cast();
方法2:建立數據模型
var data=json.decode(data.toString()); List<Map> swiperDataList = (data['data']['slides'] as List).cast(); // 頂部輪播組件數 var data = json.decode(val.toString()); 1 list = (data['data'] as List).cast(); //cast方式 訪問字段屬性是使用中括號 item['presentPrice'] model.formJson方式使用點符號 item.presentPrice ------->2中屬性訪問一種不行,就換一種 2 GoodsListModel goodsList = GoodsListModel.fromJson(data);
11.dart中map----->js中的對象{},dart中list---->js中的數組 [{},{},{}] : list中的map
12.動態創建一個List<Widget>
children: str.split("")
//每一個字母都用一個Text顯示,字體為原來的兩倍
.map((c) => Text(c, textScaleFactor: 2.0,))
.toList(),
13.dart中 變量設置默認值
?. 運算符在左邊為null的情況下會阻斷右邊的調用,?? 運算符主要作用是在左側表達式為null時為其設置默認值。
child: Text(text ?? '加載中...')),
14.反序列化(json字符串->對象)
1)、什么是序列化?為什么要序列化?
Java中 序列化就是指將對象轉換為字節序列的過程,而反序列化則是只將字節序列轉換成目標對象的過程。
15使用dart:ui包里的window中的方法來獲取屏幕寬高,它不受context限制,其實,MediaQuery的源碼就會發現其獲取屏幕寬高,最終還是調用的window方法中的方法的
16.UI提供的顏色值如何快速在flutter使用 16進制顏色#2D4ED1
#2D4ED1 ------>Color(0xff2D4ED1),
17.itemBuilder一般都有根據一個固定模板產生一系列子元素
18.StatefulWidget 組件接受參數xxx的時候需要加前綴 widget widget.xxx
19.ListView 作為整個頁面的根節點的唯一子元素時,可以不加高度,但是如果有兄弟元素時,必須加高度,否則界面無效
20.TextField 的prefixIcon圖標寬度最小值小到一定長度,就不會再小了,通過包一個Padding或者Container組件使用padding屬性擠小圖標尺寸
21.Row組件子元素2端對其: mainAxisAlignment:MainAxisAlignment.spaceBetween,
22.去掉AppBar下面的陰影elevation: 0, appBar: AppBar(title: Text('登錄頁面',style: TextStyle(color: Colors.white),),elevation: 0,),
23.Container設置最小寬度constraints : ---場景:有撐滿屏幕的背景圖的容器中放2個輸入框,容器高度由子元素撐起,但高度太小導致背景圖顯示不完整,
Container(
constraints: BoxConstraints(minHeight: 800),
24.Expanded(撐滿空間)不能放在SingleChildScrollView(空間不夠滾動)里面會報錯
開發、調試、環境、資源類
1.只有在調試模式下寫代碼時,當ctrl+s才會編譯。cmd窗口模式下flutter run運行項目時,需要切換到cmd按R/r才可以重新編譯預覽界面沒有變化,或者命令行不返回print 輸入R刷新一下
2.安裝包的時候 需要在dependencies:字段下配置 dio: ^2.0.7 然后直接保存
3.print的內容如果前面有字符串需要toString一下 如print('--------------------------》'+ result);但是直接print(result);卻可以 ---->原因可能是dart不支持字符串拼接只支持字符串模板?
4.ContentType.parse("application/x-www-form-urlencoded"); ContentType無效 解決辦法----->import 'dart:io';
5.android studio 快捷鍵
如果Ctrl+z 掉的內容,又反悔了,快捷鍵為:Ctrl + Shift + z
ctrl+D 向下復制一行
shift+F6 重命名
6.win10 android studio 代碼提示選擇屬性時卡死
Settings -->Editor -->General--> Code Completion 中去掉勾選的show the completion popup in 1000ms選項