使用具有可变结果属性的Navigator.pushReplacement



我正试图将一个值传递给Navigator堆栈中的Widget。样本代码:

class FirstPage extends StatefulWidget{
//...
receivedValue = await Navigator.push<String>(context, CupertinoPageRoute(
(ctx) => SecondPage(),
));
}

class SecondPage extends StatefulWidget{
//...
receivedValue = await Navigator.pushReplacement<String,String>(context, CupertinoPageRoute(
(ctx) => ThirdPage(),
));
}

class ThirdPage extends StatefulWidget{
//...
Navigator.pop<String>(context, outputString);
}

但是,除非我在堆栈中保留SecondPage,否则该值不会传递到第一个屏幕。在读取文档时,pushReplacement中有一个result属性,它会传递回导航器堆栈中的上一个屏幕。如果弹出更换屏幕。

但是,我想要传递的值取决于ThirdScreen中的用户输入。有办法做到吗?

不需要pushReplacement,只需推送第三页,在弹出第三页后再弹出第二页即可!

class FirstPage extends StatefulWidget{
//...
receivedValue = await Navigator.push<String>(context, CupertinoPageRoute(
(ctx) => SecondPage(),
));
}

class SecondPage extends StatefulWidget{
//...
receivedValue = await Navigator.push<String,String>(context, CupertinoPageRoute(
(ctx) => ThirdPage(),
));
Navigator.pop(context, receivedValue);
}

class ThirdPage extends StatefulWidget{
//...
Navigator.pop<String>(context, outputString);
}

最新更新