我知道我可以通过使用将数据返回到上一个屏幕
Navigator.pop(context, 'Value');
但是对于我来说,我需要使用来弹出多个屏幕
Navigator.popUntil(context, ModalRoute.withName('/login'));
我想知道在这种情况下如何将数据传递回相应的小部件?
谢谢。
答案 0 :(得分:1)
flutter API不具有该功能,在本https://github.com/flutter/flutter/issues/30112讨论中,该功能尚未发布。建议使用Page API来解决。
但是,我认为,将提供程序包https://pub.dev/packages/provider用作应用程序状态管理的一部分,以保留所需的数据并将其提供给任何感兴趣的屏幕,这是更清洁的方法。请按照以下步骤来实现。
将提供程序添加到pubspec.yaml。检查上面的链接以查看详细说明。
创建一个扩展ChangeNotifier类的通告程序类,如下所示。 ChangeNotifier类是flutter API的一部分。
class MyDataProvider extends ChangeNotifier {
//define your private data field(s). I'm using int here.
int _mydata;
//define a getter
int get myData => _myData;
// define a setter
set myData(newData){
_myData = newData;
notifyListeners();
}
}
void main(){
runApp(
ChangeNotifierProvider(create: (context) => MyDataProvider()),
child: MyApp(),
)
}
//Screen1
int currentLocalData = 78;
MyDataProvider myProvider = Provider.of<MyDataProvider>(context);
onPressed: () async {
//Assign localData to myData in the provider
myProvider.myData = currentLocalData; //calls the setter define in the provider.
await Navigator.push(context, MaterialPageRoute(
builder: (context) => Screen5()
));
//Retrieve myData from the provider and assign it to currentLocalData.
//This executes after navigating back from Screen5
currentLocalData = myProvider.myData;
}
//Screen5
MyDataProvider myProvider = Provider.of<MyDataProvider>(context);
myProvider.myData += 100;
//Use navigation.popUntil
Navigation.popUntil(context, ModalRoute.withName('/Screen1'));
答案 1 :(得分:0)
您可以通过几种方式发送数据
仅适用于当前会话 如果您只需要当前会话的数据,则可以使用静态变量
第1步:创建一个类,并在其中包含静态变量。
class Globaldata{
static String value;
}
第2步:通过
初始化变量 Globaldata.value="some_value";
第3步:使用变量
String assigned_value = Globaldata.value;