Flutter代码点击按钮后屏幕数字不更新,求排查问题
问题分析与修复
你的代码有三个核心问题导致数字始终不变:
- 变量作用域错误:把
int number = 0;放在了build方法内部,每次Flutter重新构建Widget时,这个变量都会被重置为0。必须把它提升为_MyAppState类的成员变量,这样状态才能在多次构建之间保留。 - 参数重名+未触发状态更新:
onTap回调里的(int number)是回调的局部参数,和你的计数变量重名了,而且直接number++只是修改了这个局部参数,根本没碰实际的计数变量。就算改对了变量,也必须用setState包裹修改操作,这样Flutter才知道要重新渲染UI。 - (额外优化)BottomNavigationBar的两个item标签都是
home,虽然不影响功能,但可以改成更合理的名字,比如第一个叫"增加"。
修复后的代码
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends Stateful Widget { @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { // 将变量提升为类成员,保留状态 int number = 0; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text( "Flutter", style: TextStyle( fontSize: 22, fontWeight: FontWeight.bold, ), ), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "$number", style: TextStyle( fontSize: 55, fontWeight: FontWeight.bold, ), ) ], ), ), bottomNavigationBar: BottomNavigationBar( items: [ BottomNavigationBarItem(icon: Icon(Icons.add), label: '增加'), BottomNavigationBarItem(icon: Icon(Icons.home), label: '首页'), ], // 修正onTap:用setState修改成员变量,避免参数重名 onTap: (index) { // 可根据index判断点击的按钮,这里只让第一个按钮触发增加 if (index == 0) { setState(() { number++; }); } }, ), ), ); } }
修改后,点击底部第一个按钮时,数字就会正常递增了。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

