14Flutter StatefulWidget有狀態組件、頁面上綁定數據、改變頁面數據、實現計數器功能、動態列表


/**
 * 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');
            });
          },
        )
      ],
    );
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM