我有2个小部件,然后将第一个小部件放入变量中。当我单击第一个窗口小部件中的按钮时,我将调用setState并将第二个窗口小部件放入要重建的变量中。但是,它没有用。
我尝试在它们的父窗口小部件中调用setState,它可以工作。有人知道它有什么问题以及如何解决吗?
这是我的代码:
Widget checkinWidget = CheckInTemplate();
Column(
children: <Widget>[
Expanded(
flex: 3,
child: Container(),
),
Expanded(
flex: 1,
child: AnimatedSwitcher(
duration: const Duration(seconds: 1),
child: checkinWidget
),
)
],
),
我将第一个小部件CheckInTemplate放入变量中,在CheckInTemplate中,我有一个按钮:
RaisedButton(
padding: EdgeInsets.symmetric(vertical: 15.0, horizontal: 60),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0)
),
color: Colors.white,
onPressed: (){
setState(() {
checkinWidget = CaptureCameraTemplate();
});
},
child: Text('Check in',
style: TextStyle(
fontSize: 25,
fontFamily: 'FredokaOne'
),),
),
当我单击按钮时,什么也没发生。
答案 0 :(得分:0)
我为此开发了一个示例,请检查以下代码
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;
}
}
答案 1 :(得分:0)
您可能已经添加了这一行,
Widget checkinWidget = CheckInTemplate();
采用build
方法。
从build
方法中删除它,并将其放到build的一边,然后它将起作用。