Flutter 如何在一个小部件中调用setState来用另一个小部件更改该小部件?
我有两个小部件,我把第一个放在一个变量中。当我在第一个小部件中单击一个按钮时,我将调用setState并将第二个小部件放入要重建的变量。然而,它没有起作用 我尝试在它们的父窗口小部件中调用setState,它就可以工作了。有人知道它有什么问题,以及如何解决这个问题吗 这是我的代码:Flutter 如何在一个小部件中调用setState来用另一个小部件更改该小部件?,flutter,Flutter,我有两个小部件,我把第一个放在一个变量中。当我在第一个小部件中单击一个按钮时,我将调用setState并将第二个小部件放入要重建的变量。然而,它没有起作用 我尝试在它们的父窗口小部件中调用setState,它就可以工作了。有人知道它有什么问题,以及如何解决这个问题吗 这是我的代码: Widget checkinWidget = CheckInTemplate(); Column( children: <Widget>[ Expanded(
Widget checkinWidget = CheckInTemplate();
Column(
children: <Widget>[
Expanded(
flex: 3,
child: Container(),
),
Expanded(
flex: 1,
child: AnimatedSwitcher(
duration: const Duration(seconds: 1),
child: checkinWidget
),
)
],
),
当我点击按钮时,什么也没有发生。我为此开发了一个示例,请检查下面的代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: WidgetHandling(),
);
}
}
class WidgetHandling extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _WidgetHandling();
}
}
class _WidgetHandling extends State<WidgetHandling> {
Widget widgetHolder;
void initState() {
widgetHolder = firstWidget();
super.initState();
}
Widget firstWidget() {
return Container(
color: Colors.white,
child: Center(
child: FlatButton(
color: Colors.blue,
textColor: Colors.white,
padding: EdgeInsets.all(8.0),
splashColor: Colors.blueAccent,
onPressed: () {
setState(() {
widgetHolder = secondWidget();
});
},
child: Text(
"First Widget",
style: TextStyle(fontSize: 20.0),
),
),
),
);
}
Widget secondWidget() {
return Container(
color: Colors.grey,
child: Center(
child: FlatButton(
color: Colors.blue,
textColor: Colors.white,
padding: EdgeInsets.all(8.0),
splashColor: Colors.blueAccent,
onPressed: () {
setState(() {
widgetHolder = firstWidget();
});
},
child: Text(
"Second Widget",
style: TextStyle(fontSize: 20.0),
),
),
),
);
}
@override
Widget build(BuildContext context) {
return widgetHolder;
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:WidgetHandling(),
);
}
}
类WidgetHandling扩展了StatefulWidget{
@凌驾
状态createState(){
返回_WidgetHandling();
}
}
类_WidgetHandling扩展状态{
widgetHolder;
void initState(){
widgetHolder=firstWidget();
super.initState();
}
Widget firstWidget(){
返回容器(
颜色:颜色,白色,
儿童:中心(
孩子:扁平按钮(
颜色:颜色,蓝色,
textColor:Colors.white,
填充:边缘设置。全部(8.0),
splashColor:Colors.blueAccent,
已按下:(){
设置状态(){
widgetHolder=secondWidget();
});
},
子:文本(
“第一个小部件”,
样式:TextStyle(fontSize:20.0),
),
),
),
);
}
Widget secondWidget(){
返回容器(
颜色:颜色。灰色,
儿童:中心(
孩子:扁平按钮(
颜色:颜色,蓝色,
textColor:Colors.white,
填充:边缘设置。全部(8.0),
splashColor:Colors.blueAccent,
已按下:(){
设置状态(){
widgetHolder=firstWidget();
});
},
子:文本(
“第二个小部件”,
样式:TextStyle(fontSize:20.0),
),
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回寡妇持有人;
}
}
您可能已经添加了这一行
Widget checkinWidget = CheckInTemplate();
在build
方法中
将它从
build
方法中删除,放到build的外侧,然后它就会工作。请分享一些代码。@Mahdi Malv对不起,我的错,我添加了它。你让我意识到我将2个小部件放在2类中,当我调用setState时,它只重建第一个小部件的类,而不是父小部件。谢谢你,现在可以工作了。对不起,这是我的错误,我把第一个和第二个小部件放到了2个类中,所以当我调用setState时,它将重建该类,但不会重建它们的父小部件。谢谢你帮助我。
Widget checkinWidget = CheckInTemplate();