You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中能否同时使用Stateless与Stateful Widget?含build()使用疑问

关于Flutter中混合使用Stateless与Stateful Widget的问题

能否同时使用两种Widget?

完全可以,而且这是Flutter开发里非常常见的实践。比如你要实现固定AppBar的需求,完全可以用Flutter自带的AppBar(它本身就是StatelessWidget)作为顶部固定导航,再搭配一个StatefulWidget作为页面主体(如果主体有需要动态更新的内容,比如表单输入、状态切换等),两者组合起来没有任何冲突。

两者都需要实现build()函数吗?

这里要区分清楚:

  • StatelessWidget:必须重写build()方法,它的核心逻辑就是通过build()根据自身的配置(比如传入的构造参数)生成静态UI。
  • StatefulWidget:它本身不需要实现build(),但它对应的State类必须重写build()方法——StatefulWidget的UI是由关联的State类的build()生成的,当调用setState()更新内部状态时,Flutter会重新执行这个build()来刷新界面。

build()函数的适用场景

简单来说,build()就是Flutter用来构建UI树的入口:

  • 对于StatelessWidget,每当它的外部属性(构造参数)发生变化时,Flutter会自动调用build()重新生成UI。
  • 对于StatefulWidget的State类,每当调用setState()改变内部状态后,build()会被触发,根据新的状态重新渲染界面。
    不管是哪种Widget,build()的作用都是把当前的配置/状态转化为用户可见的界面元素。

示例代码(固定AppBar + 带状态的页面主体)

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        // 固定的AppBar(StatelessWidget)
        appBar: AppBar(title: const Text('固定AppBar示例')),
        // 带状态的页面主体
        body: const CounterBody(),
      ),
    );
  }
}

class CounterBody extends StatefulWidget {
  const CounterBody({super.key});

  @override
  State<CounterBody> createState() => _CounterBodyState();
}

class _CounterBodyState extends State<CounterBody> {
  int _count = 0;

  void _incrementCount() {
    setState(() {
      _count++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text('点击次数: $_count'),
          ElevatedButton(
            onPressed: _incrementCount,
            child: const Text('点击增加'),
          ),
        ],
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者David Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:47:26