美文网首页
Flutter(十一):StatefulWidget

Flutter(十一):StatefulWidget

作者: 林ze宏 | 来源:发表于2020-07-22 09:37 被阅读0次

在 Flutter 中自定义组件其实就是一个类,这个类需要继承 StatelessWidget / StatefulWidget。

StatelessWidget 是无状态组件,状态不可变的 widget;

StatefulWidget 是有状态组件,持有的状态可能在 widget 生命周期改变。通俗的讲:如果我们想改变页面中的数据的话这个时候就需要用到 StatefulWidget;

vscode 安装相关的插件,代码补充提示:

1 简单实例

利用安装的插件,使用 statefulW 命令快速生成有状态组件代码块:

import 'package:flutter/material.dart';

import 'res/listData.dart';

void main() {
  runApp(new MyApp());
}

// 自定义组件
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      // Scaffold 定义导航头部和页面主要内容
      home: Scaffold(
        appBar: AppBar(
          title: Text('flutter 标题'),
        ),
        body: HomePage(),
      ),
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
    );
  }
}

class HomePage extends StatefulWidget { // StatefulWidget 是一个抽象类
  HomePage({Key key}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState(); // 实现抽象方法 createState 
}

class _HomePageState extends State<HomePage> { // 继承 State 类
  int count = 0;
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Container(
        height: 300,
        width: 300,
        color: Colors.pink,
        child: Column(
          children: <Widget>[
            Chip(label: Text("${this.count}")),
            SizedBox(height: 20),
            RaisedButton(
              child: Text('点击'),
              onPressed: () {
                setState(() {
                  this.count++;
                });
              },
            )
          ],
        ),
      ),
    );
  }
}

效果

2 新增数据 List

import 'package:flutter/material.dart';

import 'res/listData.dart';

void main() {
  runApp(new MyApp());
}

// 自定义组件
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      // Scaffold 定义导航头部和页面主要内容
      home: Scaffold(
        appBar: AppBar(
          title: Text('flutter 标题'),
        ),
        body: HomePage(),
      ),
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
    );
  }
}

class HomePage extends StatefulWidget {
  // StatefulWidget 是一个抽象类
  HomePage({Key key}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState(); // 实现抽象方法 createState
}

class _HomePageState extends State<HomePage> {
  // 继承 State 类
  List list = new List();

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Container(
        height: 300,
        width: 300,
        color: Colors.pink,
        child: Column(
          children: <Widget>[
            Column(
              children:
                  this.list.map((e) => Chip(label: Text("${e}"))).toList(),
            ),
            SizedBox(height: 20),
            RaisedButton(
              child: Text('点击'),
              onPressed: () {
                setState(() {
                  this.list.add('点击新增一条数据');
                });
              },
            )
          ],
        ),
      ),
    );
  }
}

效果

相关文章

网友评论

      本文标题:Flutter(十一):StatefulWidget

      本文链接:https://www.haomeiwen.com/subject/bfomfktx.html