關於Flutter中的StatefulWidget小最佳化
Flutter中使用StatefulWidget非常苦逼,寫一個類繼承StatefulWidget,還要寫一個類繼承State,大多數都是模板程式碼,我整理過一個程式碼模板,但是總感覺不是很爽。有沒有更簡潔的方式?於是我就想改造一下StatefulWidget,讓開發起來更簡潔。
這裡只有一個類,取名叫做usefulStatefulWidget
,意思是對於使用StatefulWidget很有幫助,然後利用Dart類裡面的extends和with的特性,把StatefulWidget和State這兩個類做了一些封裝,具體程式碼如下:
abstract class usefulStatefulWidget extends _Stateful with State<StatefulWidget> {
@override
State<StatefulWidget> createState() => this;
refresh() => setState(() {});
}
abstract class _Stateful extends StatefulWidget {}
這樣一來,我們寫程式碼就簡潔多了,不再需要去寫那麼多類了。例如,我們就把建立Flutter專案時,給我們提供的示例程式碼改造一下,如下:
import 'package:flutter/material.dart';
import 'package:demo/usefulStatefulWidget.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '簡單實用的StatefulWidget',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: '簡單實用的StatefulWidget'),
);
}
}
class MyHomePage extends usefulStatefulWidget {
MyHomePage({Key key, this.title});
final String title;
int _counter = 0;
void _incrementCounter() {
_counter++;
refresh();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(title),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text(
'You have pushed the button this many times:',
),
new Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: new FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: new Icon(Icons.add),
),
);
}
}
這樣一來就節省了一些程式碼,寫起來也方便多了。
注意:如果需要使用到大量的state或者互動狀態需要更改,這種封裝其實沒有多大作用,因為我們要呼叫setState,封裝的程式碼裡面並沒有做任何處理。這裡只是提供了一種最佳化方式,僅供參考。
我是阿韋,專注於Flutter研究,更多Flutter學習乾貨可以看我的github: 歡迎大家關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4692/viewspace-2818675/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [雜談]-Flutter中StatefulWidget的開啟方式Flutter
- Flutter中如何選擇StatelessWidget和StatefulWidgetFlutter
- Flutter(七)之有狀態的StatefulWidgetFlutter
- Flutter-你還在濫用StatefulWidget嗎Flutter
- 關於mysql的最佳化MySql
- Flutter : 關於 KeyFlutter
- Flutter : 關於 ZoneFlutter
- Flutter系列四:你真的瞭解StatelessWidget和StatefulWidget的區別嗎?Flutter
- Flutter StatefulWidget和StatelessWidget的區別和使用以及更深入的思考Flutter
- 關於 const 最佳化。
- JDK17中關於ZGC的部分最佳化建議JDKGC
- Python中關於Thread的一點小知識Pythonthread
- 正則中關於環視(lookaround)的小例子
- 關於在Flutter Web中載入html(持續更新中......)FlutterWebHTML
- 關於使用iview中Table元件的一點小技巧View元件
- 關於CSS中的float可能出現的小問題CSS
- 關於 React 效能最佳化和數棧產品中的實踐React
- 關於DrawerLayout的小問題
- 關於最近開發小程式中踩過的那些坑
- 關於PCA降維中遇到的python問題小結PCAPython
- 關鍵業務系統的最佳化小技巧
- 8個關於Python的小技巧Python
- Go - 關於 protoc 工具的小疑惑Go
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 動畫最佳化:關於 AnimationClip 的三兩事動畫
- Flutter關於一個登入頁Flutter
- 關於Flutter iOS安裝包大小的解讀FlutteriOS
- 關於Flutter你要知道的可能都在這兒Flutter
- 關於Flutter 您必須知道的知識點!!!Flutter
- Flutter關於TextField你能知道的一切Flutter
- 基於Flutter的俄羅斯方塊小遊戲Flutter遊戲
- 關於 Laravel6.0 開發中的簡單小問題解答Laravel
- 關於Servlet小總結Servlet
- 譯| 關於 Unix 命令 `yes` 的小故事
- 關於SQL優化的小知識SQL優化
- 關於輸出的小語法點
- 關於字串的功能函式小結字串函式
- 關於Mac廢紙簍的小技巧!Mac