關於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中limit最佳化的問題MySqlMIT
- 關於小數中0的處理
- Flutter : 關於 KeyFlutter
- Flutter : 關於 ZoneFlutter
- 關於mysql的最佳化MySql
- 關於 Laravel 中 Ajax 問題的小結Laravel
- 關於在Flutter Web中載入html(持續更新中......)FlutterWebHTML
- Flutter StatefulWidget和StatelessWidget的區別和使用以及更深入的思考Flutter
- Flutter系列四:你真的瞭解StatelessWidget和StatefulWidget的區別嗎?Flutter
- 關於使用iview中Table元件的一點小技巧View元件
- 關於CSS中的float可能出現的小問題CSS
- 關於 const 最佳化。
- 關鍵業務系統的最佳化小技巧
- 關於 React 效能最佳化和數棧產品中的實踐React
- Python中關於Thread的一點小知識Pythonthread
- 關於最近開發小程式中踩過的那些坑
- 關於字串中取相同的字元問題(小學題)字串字元
- 關於自定義程式的效能最佳化
- 關於分享的小見解
- 關於PCA降維中遇到的python問題小結PCAPython
- 關於PHP程式設計中的變數使用技巧小結PHP程式設計變數
- 關於javascript中的thisJavaScript
- Sql最佳化(三) 關於oracle的併發SQLOracle
- 關於Execute to Parse %:比例太低的最佳化思路
- 關於分頁查詢的最佳化思路
- Go - 關於 protoc 工具的小疑惑Go
- 關於微信小程式webview的使用微信小程式WebView
- 關於PostCSS的一點小科普CSS
- 那些關於Java的小祕密Java
- 關於jdonframework框架的小疑問Framework框架
- 關於null值的小知識Null
- 關於SFV的小知識(轉)
- Flutter關於一個登入頁Flutter
- 關於 AppCrawler 執行過程中的幾個小問題APP