Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如果在底部纸张上按下确认按钮,如何重建屏幕?_Flutter_Dart - Fatal编程技术网

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,
    );
  }
}