导航器和提供者之间的冲突

时间:2019-10-29 12:58:11

标签: flutter dart

使用带有Navigator概念的Provider在屏幕之间发送数据

运行后错误

在构建SecondRoute(dirty)时引发了以下ProviderNotFoundError: 错误:在此SecondRoute小部件上方找不到正确的提供程序

要修复,请:

  • 确保提供者是此SecondRoute小部件的祖先
  • 向提供者提供类型
  • 为消费者提供类型
  • 将类型提供给Provider.of()
  • 始终使用包导入。例如:`import'package:my_app / my_code.dart';
  • 确保使用正确的context

https://www.ideone.com/xHXK5m

3 个答案:

答案 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