/** * Flutter StatefulWidget有狀態組件、頁面上綁定數據、改變頁面數據 * 在Flutter中自定義組件其實就是一個類,這個類需要繼承StatelessWidget/StatefulWidget * StatelessWidget是無狀態組件,狀態不可變得widget * StatefulWidget是有狀態組件,持有的狀態可能在widget生命周期改變。如果我們想 * 改變頁面中的數據化的這個時候就需要用到StatefulWidget */
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('自定義組件'), ), body: HomeContent(), ), ); } } class HomeContent extends StatelessWidget { @override Widget build(BuildContext context) { //Stack結合align實現布局: return HomePage(); } } //自定義有狀態組件: class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { int countNum=0; @override Widget build(BuildContext context) { return Column( children: <Widget>[ SizedBox(height: 200), Chip(label: Text('${this.countNum}')), SizedBox(height: 20), RaisedButton( child: Text('按鈕'), onPressed: (){ setState(() { //只有有狀態的組件里面才有 this.countNum++; }); }, ) ], ); } }
demo2
main.dart
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('自定義組件'), ), body: HomeContent(), ), ); } } class HomeContent extends StatelessWidget { @override Widget build(BuildContext context) { //Stack結合align實現布局: return HomePage(); } } //自定義有狀態組件: class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { List list=new List(); @override Widget build(BuildContext context) { return ListView( children: <Widget>[ Column( children:this.list.map((value){ return ListTile( title: Text(value), ); }).toList() ), RaisedButton( child: Text('按鈕'), onPressed: (){ setState(() { this.list.add('新增數據1'); this.list.add('新增數據2'); }); }, ) ], ); } }