Flutter 如果在底部纸张上按下确认按钮,如何重建屏幕?
我使用Flutter 如果在底部纸张上按下确认按钮,如何重建屏幕?,flutter,dart,Flutter,Dart,我使用ListView.builder构建了一个主屏幕,其中使用的是渲染卡。这些卡有一个确认按钮,用于从firestore获取确认状态。当我点击确认按钮时,屏幕底部会出现一张纸,询问我是否确定。一旦我点击底部页面上的Yes,我希望重建主页上的卡片,并将按钮从confirm更改为confirm 我使用setState更改了onPressed事件中的值,它成功地更改了该值,但确认按钮没有更改为confirled 任何关于如何解决这个问题的线索都将不胜感激 主页卡布局 class HomepageCa
ListView.builder
构建了一个主屏幕,其中使用的是渲染卡。这些卡有一个确认按钮,用于从firestore获取确认状态。当我点击确认
按钮时,屏幕底部会出现一张纸,询问我是否确定。一旦我点击底部页面上的Yes
,我希望重建主页上的卡片
,并将按钮从confirm
更改为confirm
我使用setState
更改了onPressed
事件中的值,它成功地更改了该值,但确认按钮没有更改为confirled
任何关于如何解决这个问题的线索都将不胜感激
主页卡布局
class HomepageCards extends StatefulWidget {
final FirebaseUser user;
final Map cardDetails;
HomepageCards({@required this.user, this.cardDetails});
@override
_HomepageCardsState createState() => _HomepageCardsState();
}
class _HomepageCardsState extends State<HomepageCards> {
@override
Widget build(BuildContext context) {
// Confirmation status from firebase about the captain
bool isConfirmed = widget.cardDetails['c'];
final screenHeight = MediaQuery.of(context).size.height;
final screenWidth = MediaQuery.of(context).size.width;
return SingleChildScrollView(
padding: EdgeInsets.fromLTRB(screenHeight / 60, screenHeight / 90,
// UI Code here......
Container(
height: screenHeight / 80,
),
// Confirm Button checking condition and building UI accordingly
isConfirmed == true
? captainConfirmed(context, isConfirmed) // if confirmed then different button style widget
: confirmAndCancelButton(context, isConfirmed), //if not confirmed then show confirm and cancel button in the card
],
),
// Some UI
);
}
}
您可以在_HomepageCardsState类中创建一个函数,用于更改isConfirmed的状态,并将该函数传递给要更改状态的小部件。然后按下“是”键,只需给出该函数。它将更改_HomepageCardsState小部件中isConfirmed的状态,以便您可以看到captainConfirmed小部件 我留下了一个小的演示,它模拟了在您的案例中如何做到这一点 我希望下面的代码能澄清您的想法
class DeleteWidget extends StatefulWidget {
@override
_DeleteWidgetState createState() => _DeleteWidgetState();
}
class _DeleteWidgetState extends State<DeleteWidget> {
bool isConfirmed = false;
changeconfirmed() {
setState(() {
isConfirmed = !isConfirmed;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: isConfirmed
? Home1()
: Home2(
function: changeconfirmed,
),
)),
);
}
}
class Home1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text("confirmed Widget"),
);
}
}
class Home2 extends StatelessWidget {
final Function function;
Home2({this.function});
@override
Widget build(BuildContext context) {
return RaisedButton(
child: Text("press"),
onPressed: function,
);
}
}
类DeleteWidget扩展StatefulWidget{
@凌驾
_DeleteWidgetState createState()=>\u DeleteWidgetState();
}
类_DeleteWidgetState扩展状态{
bool isConfirmed=false;
变更确认(){
设置状态(){
isConfirmed=!isConfirmed;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
儿童:中心(
孩子:我确认了
?家庭1()
:Home2(
功能:变更确认,
),
)),
);
}
}
类Home1扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(
子项:文本(“已确认的小部件”),
);
}
}
类Home2扩展了无状态小部件{
最终功能;
Home2({this.function});
@凌驾
小部件构建(构建上下文){
返回上升按钮(
子:文本(“按”),
onPressed:函数,
);
}
}
使用您的答案,我可以进入主页1
,但按钮仍然没有更改,即确认按钮没有从确认
更改为确认
。如果你能在这方面帮助我,那就太好了。你是在谈论我的演示还是你的真实代码?请详细说明你想说什么好吗?
class DeleteWidget extends StatefulWidget {
@override
_DeleteWidgetState createState() => _DeleteWidgetState();
}
class _DeleteWidgetState extends State<DeleteWidget> {
bool isConfirmed = false;
changeconfirmed() {
setState(() {
isConfirmed = !isConfirmed;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: isConfirmed
? Home1()
: Home2(
function: changeconfirmed,
),
)),
);
}
}
class Home1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text("confirmed Widget"),
);
}
}
class Home2 extends StatelessWidget {
final Function function;
Home2({this.function});
@override
Widget build(BuildContext context) {
return RaisedButton(
child: Text("press"),
onPressed: function,
);
}
}