模擬器中調試元素的布局:
Android Studio 右側邊欄 Flutter Inspector,選擇 Toggle Debug Paint 打開。
格式化代碼:
編輯器中右鍵 Reformat Code with dartfmt。
使用外部功能包(https://pub.dartlang.org/flutter):
把外部包名加到 pubspec.yaml 的 dependencies 依賴中,運行 flutter packages get 安裝,代碼中 import 進來使用。
例子內容解讀(https://flutter.io/docs/get-started/codelab):
StatelessWidget 子 Widget 實現 build 方法,Stateless widget 是不變的,意思是它們的屬性不能變 - 所有的值都是 final。
StatefulWidget 子 Widget 實現 createState 方法;Stateful widget 維護着 widget 生命周期內可能改變的狀態。
實現一個 stateful widget 需要至少兩個 class:
1)一個創建了 State 類實例的 StatefulWidget 類。
2)一個 State 類。
// 我們使用了一個 RandomWords 的 State 類,RandomWordsState 依賴 RandomWords 類。 class RandomWordsState extends State<RandomWords> { // TODO 實現 build() 方法,返回 Scaffold @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Startup Name Generator'), ), body: _buildSuggestions(), ); } // 實現 Scaffold 里使用的私有 widget 功能,比如構建 ListView,ListView 構造方法允許我們構建一個按需加載的 list // ListView 提供一個 builder 屬性和 itemBuilder 方法,itemBuilder 是一個匿名函數形式的回調方法,傳入 BuildContext 和 行索引號。 Widget _buildSuggestions() { return ListView.builder( padding: const EdgeInsets.all(16.0), itemBuilder: /*1*/ (context, i) { if (i.isOdd) return Divider(); /*2*/ final index = i ~/ 2; /*3*/ if (index >= _suggestions.length) { _suggestions.addAll(generateWordPairs().take(10)); /*4*/ } return _buildRow(_suggestions[index]); }); }
/*1*/ itemBuilder回調在生成每個單詞時調用一次,並替換 ListTile 行。偶數行為單詞添加 ListTile,奇數行添加 Divider widget 垂直分隔實體。
/*2*/ 在 ListView 每行之前添加一個一像素高的 divider
/*3*/ 表達式 i ~/ 2,i 整除 2,返回整數的結果。如 1,2,3,4,5 變成 0,1,1,2,2。這計算 ListView 中真實的單詞數,減去 divider widget 數。
/*4*/ 如果到達了可用單詞的結尾,接着生成 10個到建議列表中。調用 _buildRow 展示每行的 title。
Widget _buildRow(WordPair pair) { return ListTile( title: Text( pair.asPascalCase, style: _biggerFont, ), ); } } // 有狀態的類除了創建 State 類的實例,什么都不做。 class RandomWords extends StatefulWidget { @override RandomWordsState createState() => new RandomWordsState(); }
Flutter Api Doc(https://docs.flutter.io/flutter/index.html):
ListTile 一個單獨的固定高度的行,一般包含有文本和前后圖標(https://docs.flutter.io/flutter/material/ListTile-class.html)。
第一行的 text 不是可選的,由 title 指定。
subtitle 是可選的,會分配附加一行文本的空間,或者當 isThreeLine 為 true 是兩行。
dense 為 true 時,title 總高 和 DefaultTextStyles 包裹的 title、subtitle 尺寸會縮小。
ListTile 總是固定的高度(取決於 isThreeLine、dense、subtitle 是如何配置的);根據它們的內容無法增加高度。
如果你在尋找可以在一行內任意布局的 widget,考慮使用 Row.
ListTile 一般在 ListViews 中使用,或者 Drawer 和 Card 的 Column 中。
需要它的一個祖先是 Material widget。
ListTileTheme,給 ListTiles 定義了視覺屬性。
ListView,可以在一個滾動列表中展示任意數量的 ListTile。
CircleAvatar,代表一個人的 icon,通常作為 ListTile 的 leading 元素來使用。
Card,展示少量的帶有 Column 的 ListTiles。
Divider,
ListTile.divideTitles,
CheckboxListTile,RadioListTile,SwitchListTile
Divider 兩邊帶有 padding的一個設備像素厚水平線(https://docs.flutter.io/flutter/material/Divider-class.html)。
Divider 可以用在 list、Drawer 和其它需要水平/垂直分隔內容的地方。
在一個列表的 item 中使用一像素 divider,考慮使用 ListTile.divideTiles,是針對這種情況優化的例子。
盒子高度由 Divider.height 控制,合適的 padding 會在寬高中自動計算。
PopupMenuDivider,等同 Divider,但是針對彈出菜單。
ListTile.divideTiles,另一種 list 中的 divide widget 的途徑。
part1:https://flutter.io/docs/get-started/codelab
LearnMore:https://flutter.dev/docs/get-started/learn-more
ApiReference:https://docs.flutter.io/
FlutterPackages:https://pub.dartlang.org/flutter
Codelabs:https://codelabs.developers.google.com/codelabs/flutter/index.html#3
Link:https://www.cnblogs.com/farwish/p/10393029.html