### Dart 對於 JS 的 reduce Dart 同樣有 reduce,不過 reduce 有少少唔同,最相似係用 fold。 ```dart // create list final list = ['a', 'bb', 'ccc']; // compute the sum of all length list.fold(0, (t, e) => t + e.length); // result is 6 ``` ### Dart double ceil double force 進位 ```dart print(1.99999.ceil()); // 2 print(2.0.ceil()); // 2 print(2.00001.ceil()); // 3 print((-1.99999).ceil()); // -1 print((-2.0).ceil()); // -2 print((-2.00001).ceil()); // -2 ``` ### Flutter container add border 幫 Container 加入 border ```dart Container( margin: const EdgeInsets.all(15.0), padding: const EdgeInsets.all(3.0), decoration: BoxDecoration( border: Border.all(color: Colors.blueAccent), ), child: Text('My Awesome Border'), ) ``` ### 設定一個 FocusNode 用來自動畫面中 Focus 的目標 先在 class 入面設定一個 `FocusNode`。 ```dart final _myField = FocusNode(); ``` 然後在 TextField 入面加入 focusNode 參數。 ```dart TextFormField( focusNode: _myField, ..., ); ``` 之後就可以通過使用 `_myField` 去選定現在的 focus 目標。 ```dart _myField.requestFocus(); ``` 得記用完之後要 `dispose` 返佢。 ```dart @override void dispose() { _myField.dispose(); } ``` ### Flutter TextField 輸入完成後 focus 下一個 TextField 最普通情況,可以自動移到下一個 TextField: `TextInputAction.next` 移到下一個 TextField。 `TextInputAction.done` 輸入完成,關上 Keyboard。 ```dart TextField( decoration: InputDecoration(hintText: 'TextField A'), textInputAction: TextInputAction.next, // Moves focus to next. ); ``` 也可以通過 `onFieldSubmitted` 自訂你想要 Focus 的目標。 ```dart Column( crossAxisAlignment: CrossAxisAlignment.stretch, children:
[ TextFormField( textInputAction: TextInputAction.next, autofocus: true, decoration: InputDecoration(labelText: "Input 1"), onFieldSubmitted: (v){ FocusScope.of(context).requestFocus(focus); }, ), TextFormField( focusNode: focus, decoration: InputDecoration(labelText: "Input 2"), ), ], ); ``` ### Flutter Scrollbar 及 SingleChildScrollView 設定 controller 要令到 `Scrollbar` 及 `SingleChildScrollView` 可以運作正常,必需要設定好 controller 才行。設定的方法如下: 設先要係 class 入面整返個 `ScrollController` 先 ```dart final _pageScrollController = ScrollController(); ``` 之後係 `Scrollbar` 同埋 `SingleChildScrollView` 入面都設定返 controller。 ```dart Scrollbar( controller: _pageScrollController, child: SingleChildScrollView( controller: _pageScrollController, ..., ), ); ``` 可以用以下方法直接 scroll 去最頭或者最尾。 ```dart // scroll to top _pageScrollController.jumpTo(0); // scroll to end _pageScrollController.jumpTo(_pageScrollController.position.maxScrollExtent); ``` 最後就可以係任何地方使用 `jump()` 方法去 Scroll 去頁面不同地方。 ```dart _pageScrollController.jumpTo(0); ```