StatefulWidget(setState 无效没有显示)
StatefulWidget (setState not work did't show )
import 'package:flutter/material.dart';
class CounterScreen extends StatefulWidget
{
const CounterScreen({Key? key}) : super(key: key);
@override
State<CounterScreen> createState() {
return _CounterScreenState();
}
}
class _CounterScreenState extends State<CounterScreen> {
int number=1;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"Counter"
),
),
body: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(onPressed: (){ number--;} , child: Text("Minus",)),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Text("$number",style: TextStyle(color: Colors.black,fontSize: 30,),),
),
TextButton(onPressed: (){ number++;print(number);}, child: Text("Plus",)),
],
),
),
);
}
}
您必须在要更新 UI 的地方使用 setstate。所以这一行应该是
TextButton(onPressed: (){ number--;} , child: Text("Minus",)),
像这样
TextButton(
onPressed: () {
setState(() {
number--;
});
},
child: const Text(
"Minus",
));
import 'package:flutter/material.dart';
class CounterScreen extends StatefulWidget
{
const CounterScreen({Key? key}) : super(key: key);
@override
State<CounterScreen> createState() {
return _CounterScreenState();
}
}
class _CounterScreenState extends State<CounterScreen> {
int number=1;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"Counter"
),
),
body: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(onPressed: (){ number--;} , child: Text("Minus",)),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Text("$number",style: TextStyle(color: Colors.black,fontSize: 30,),),
),
TextButton(onPressed: (){ number++;print(number);}, child: Text("Plus",)),
],
),
),
);
}
}
您必须在要更新 UI 的地方使用 setstate。所以这一行应该是
TextButton(onPressed: (){ number--;} , child: Text("Minus",)),
像这样
TextButton(
onPressed: () {
setState(() {
number--;
});
},
child: const Text(
"Minus",
));