## SingleChildScrollView
SingleChildScrollView類似于Android中的ScrollView,它只能接收一個子Widget。定義如下:
```
SingleChildScrollView({
this.scrollDirection = Axis.vertical, //滾動方向,默認是垂直方向
this.reverse = false,
this.padding,
bool primary,
this.physics,
this.controller,
this.child,
})
```
除了通用屬性,我們重點看一下`reverse`和`primary`兩個屬性:
- reverse:該屬性API文檔解釋是:是否按照閱讀方向相反的方向滑動,如:`scrollDirection`值為`Axis.horizontal`,如果閱讀方向是從左到右(取決于語言環境,阿拉伯語就是從右到左),reverse為`true`時,那么滑動方向就是從右往左。其實此屬性本質上是決定可滾動widget的初始滾動位置是在“頭”還是“尾”,取`false`時,初始滾動位置在“頭”,反之則在“尾”,讀者可以自己試驗。
- primary:指是否使用widget樹中默認的PrimaryScrollController;當滑動方向為垂直方向(`scrollDirection`值為`Axis.vertical`)并且`controller`沒有指定時,`primary`默認為`true`.
### 示例
下面是一個將大寫字母A-Z沿垂直方向顯示的例子,由于垂直方向空間不夠,所以使用SingleChildScrollView。:
```
class SingleChildScrollViewTestRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return Scrollbar(
child: SingleChildScrollView(
padding: EdgeInsets.all(16.0),
child: Center(
child: Column(
//動態創建一個List<Widget>
children: str.split("")
//每一個字母都用一個Text顯示,字體為原來的兩倍
.map((c) => Text(c, textScaleFactor: 2.0,))
.toList(),
),
),
),
);
}
}
```
效果:

- 緣起
- 起步
- 移動開發技術簡介
- Flutter簡介
- 搭建Flutter開發環境
- 常見配置問題
- Dart語言簡介
- 第一個Flutter應用
- 計數器示例
- 路由管理
- 包管理
- 資源管理
- 調試Flutter APP
- Dart線程模型及異常捕獲
- 基礎Widgets
- Widget簡介
- 文本、字體樣式
- 按鈕
- 圖片和Icon
- 單選框和復選框
- 輸入框和表單
- 布局類Widgets
- 布局類Widgets簡介
- 線性布局Row、Column
- 彈性布局Flex
- 流式布局Wrap、Flow
- 層疊布局Stack、Positioned
- 容器類Widgets
- Padding
- 布局限制類容器ConstrainedBox、SizeBox
- 裝飾容器DecoratedBox
- 變換Transform
- Container容器
- Scaffold、TabBar、底部導航
- 可滾動Widgets
- 可滾動Widgets簡介
- SingleChildScrollView
- ListView
- GridView
- CustomScrollView
- 滾動監聽及控制ScrollController
- 功能型Widgets
- 導航返回攔截-WillPopScope
- 數據共享-InheritedWidget
- 主題-Theme
- 事件處理與通知
- 原始指針事件處理
- 手勢識別
- 全局事件總線
- 通知Notification
- 動畫
- Flutter動畫簡介
- 動畫結構
- 自定義路由過渡動畫
- Hero動畫
- 交錯動畫
- 自定義Widget
- 自定義Widget方法簡介
- 通過組合現有Widget實現
- 實例:TurnBox
- CustomPaint與Canvas
- 實例:圓形漸變進度條(自繪)
- 文件操作與網絡請求
- 文件操作
- Http請求-HttpClient
- Http請求-Dio package
- 實例:Http分塊下載
- WebSocket
- 使用Socket API
- Json轉Model
- 包與插件
- 開發package
- 插件開發:平臺通道簡介
- 插件開發:實現Android端API
- 插件開發:實現IOS端API
- 系統能力調用
- 國際化
- 讓App支持多語言
- 實現Localizations
- 使用Intl包
- Flutter核心原理
- Flutter UI系統
- Element和BuildContext
- RenderObject與RenderBox
- Flutter從啟動到顯示