flutter学习之旅 -有状态的组件(StatefulWidget)

文章介绍了在Flutter中使用StatefulWidget来管理可变状态,例如实现数字num的增加功能,并讨论了final和const关键字在定义常量数组时的区别。示例代码展示了如何创建有状态组件以及添加按钮来改变页面数据显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们重建一个项目

flutter create 项目名

我们会看到
class MyHomePage extends StatefulWidget{...}

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

  • StatelessWidget是无状态组件,状态不可改变的widget
  • StatefulWidget是有状态的组件,持有的状态可能在widget生命周期改变

我们要想改变页面中的数据的话这个时候我们就要用到StatefulWidget

StatefulWidget格式

//有状态组件
class HomePage extends StatefulWidget {
  const HomePage ({super.key});

  
  State<HomePage> createState() => _MyNum();//要实现createState方法
}

class _MyNum extends State<HomePage> {//要继承以上的类型
  
  Widget build(BuildContext context) {
    return Container();
  }
}

实现num增加

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text("flutter App")),
        body: const HomePage(),
      ),
    );
  }
}

//有状态组件
class HomePage extends StatefulWidget {
  const HomePage({super.key});

  
  State<HomePage> createState() => _MyNum();
}

class _MyNum extends State<HomePage> {
  int _numData = 0;
  
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            "$_numData",
            style: Theme.of(context).textTheme.headline2,
          ),
          const SizedBox(height: 60),
          ElevatedButton(
              onPressed: () {
                setState(() {
                  _numData++;
                });
              },
              child: const Text("+1"))
        ],
      ),
    );
  }
}

final

finalconst定义的是常量,常量的值不可改变

  • const必须声明的时候赋值; final可以先声明后赋值,也可以声明赋值
final定义数组
void main(){
  final List l=[];
  l.add(12);
  l.add(22);
}

以上的写法是被允许的,因为是往数组里添加数据而不是赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结城明日奈是我老婆

支持一下一直热爱程序的菜鸟吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值