Flutter 指定问题:类型';填充数据';(Statefulwidget)不是类型为';列表<;对象>';

Flutter 指定问题:类型';填充数据';(Statefulwidget)不是类型为';列表<;对象>';,flutter,push,Flutter,Push,我是新来的。我正试图用pushNamed将列表从NewData推送到FillData屏幕。但它说: 处理手势时引发了以下类型错误: 类型“FillData”不是类型“List”的子类型 如果删除“/FillData”中的注释,则会收到空数据。我该怎么办 这是我的代码: 设置导航器 您的代码有两个问题: 1-你不能使用onGenerateRoute进行用户路由,因为现在应用程序不知道去哪里,到你没有传递任何信息的小部件(内部路由)或onGenerateRoute内部的小部件 2-参数是一个通用对象

我是新来的。我正试图用
pushNamed
将列表从NewData推送到FillData屏幕。但它说:

处理手势时引发了以下类型错误: 类型“FillData”不是类型“List”的子类型

如果删除“/FillData”中的注释,则会收到空数据。我该怎么办

这是我的代码:

  • 设置导航器

  • 您的代码有两个问题:

    1-你不能使用onGenerateRoute进行用户路由,因为现在应用程序不知道去哪里,到你没有传递任何信息的小部件(内部路由)或onGenerateRoute内部的小部件

    2-参数是一个通用对象,您可以将任何需要的内容放入其中,并执行以下操作:

    final ChartGroupData chartName=setting.arguments;决赛

    列表组名=setting.arguments

    将相同的值传递给两个不同的对象,我通过执行以下操作解决了这个问题(这不是最好的,但会让您大致了解应该做什么)

    • 已创建包含要传递的数据的新对象:

      class ObjectToPass {
        final ChartGroupData chartName;
        final List<ChartGroupData> groupNames;
      
        ObjectToPass({this.chartName, this.groupNames});
      }
      
    • 要导航到FillData,请执行以下操作:

      Navigator.pushNamed(
        context,
        '/FillData',
        arguments: ObjectToPass(
          chartName: ChartGroupData(_nameCtrl.text),
          groupNames: groupNames,
        ),
      );
      
    • 最后,这是MaterialApp的外观:

      return MaterialApp(
        initialRoute: '/NewData',
        onGenerateRoute: (setting) {
          if (setting.name == '/FillData') {
            return MaterialPageRoute(builder: (context) {
              return FillData(
                objectToPass: setting.arguments,
              );
            });
          } else if (setting.name == '/NewData') {
            return MaterialPageRoute(builder: (_) => NewData());
          }
          return null;
        },
      );
      

    您可以传递一个列表而不是我创建的对象,并通过它的索引从中获取您的对象。

    谢谢,它可以工作。我已经成功地推送了我的列表。这是我项目中最困难的部分
    lass ChartGroupData {
    
      final String groupNames;
      ChartGroupData(this.groupNames);
    
      @override
      String toString() {
        return 'Group: $groupNames';
      }
    }
    
    class ObjectToPass {
      final ChartGroupData chartName;
      final List<ChartGroupData> groupNames;
    
      ObjectToPass({this.chartName, this.groupNames});
    }
    
    class FillData extends StatefulWidget {
      final ObjectToPass objectToPass;
      FillData({Key key, @required this.objectToPass}) : super(key: key);
    
      @override
      FillDataStage createState() => FillDataStage();
    }
    
    ...
    
    void _showDialog() {
      showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            title: Text("Received Data"),
            content: Text(widget.objectToPass.chartName.toString()),
          );
        },
      );
    }
    
    void _onTapPrintReceivedData() {
      print(widget.objectToPass.groupNames);
      print(widget.objectToPass.chartName);
    }
    
    Navigator.pushNamed(
      context,
      '/FillData',
      arguments: ObjectToPass(
        chartName: ChartGroupData(_nameCtrl.text),
        groupNames: groupNames,
      ),
    );
    
    return MaterialApp(
      initialRoute: '/NewData',
      onGenerateRoute: (setting) {
        if (setting.name == '/FillData') {
          return MaterialPageRoute(builder: (context) {
            return FillData(
              objectToPass: setting.arguments,
            );
          });
        } else if (setting.name == '/NewData') {
          return MaterialPageRoute(builder: (_) => NewData());
        }
        return null;
      },
    );