使用带有Navigator概念的Provider在屏幕之间发送数据
运行后错误
在构建SecondRoute(dirty)时引发了以下ProviderNotFoundError: 错误:在此SecondRoute小部件上方找不到正确的提供程序
要修复,请:
context
。答案 0 :(得分:0)
您可以像这样将数据放在类中传递数据
CreateObject("WScript.Shell").Run "mstsc D:\Performance_Testing\Script\CRO.rdp"
objShell.Run strExe & "\\"&strComputer &strInstaller1][1]**
并接收这样的数据
RaisedButton(
child: Text(‘Send data to the second page’),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(
data: data,
)),
);
},
),
答案 1 :(得分:0)
您可以尝试将private async void button3_Click(object sender, EventArgs e)
{
var progress = new Progress<int>(percent =>
{
progressBar1.Value = percent;
});
progressBar1.Value = 1;
int value = 100;
await DoSomeWork(value,progress);
}
public Task DoSomeWork(int iterations,IProgress<int> progress)
{
for(int i=0;i<iterations;i++)
{
await Task.Run(()=>{
DoSomethingReallySlow(i);
progress.Report(i*100/iterations));
});
}
}
所具有的任何Provider
值放在MaterialApp
上方,从而导航,或者,当您推入第二页时,再次提供该值。提供程序的范围仅限于小部件树,因此这是预期的行为。
例如,要将值传递到另一条路线,您可以执行类似的操作
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
final foo = 'foo';
Provider<String>.value(
value: foo,
child: NewPage(),
);
}));
},
然后像在NewPage路由中一样定期使用它。
答案 2 :(得分:0)
尝试以下代码:
MaterialApp(
title: 'Navigation Basics',
home: ChangeNotifierProvider(
builder: (context) => Data(),
child: FirstRoute(),
))
删除ChangeNotifierProvider
中的FirstRoute