我正在尝试使用 generateRoute 将多个参数传递给颤动屏幕

德维·苏雷什

我正在尝试按照How to pass multiple arguments in named route in flutter 中所示的方式执行上述操作

我基本上想将 2 个参数: docid 和 isCaregiver 传递到主屏幕,但它显示未为类定义参数的错误。ScreenArguments 类是传递 2 个参数的类。请看代码。

ScreenArguments.dart

class ScreenArguments {
  final String docid;
  final bool isCaretaker;

  ScreenArguments({this.docid, this.isCaretaker});
}

main.dart

import 'dart:ui';
import 'package:vitality/stream.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:vitality/screens/login.dart';
import 'screens/homescreen.dart';
import 'screens/chatbot.dart';
import 'screens/todo.dart';
import 'package:vitality/screens/welcome.dart';
import 'screens/register.dart';
import 'package:firebase_core/firebase_core.dart';
import 'components/ScreenArguments.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class ScreenArguments {
  final String reportTitle;
  final String reportFullPath;

  ScreenArguments(this.reportTitle, this.reportFullPath);
}

class Router {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    final args = settings.arguments;
    switch (settings.name) {
      case Welcome.id:
        return MaterialPageRoute(builder: (_) => Welcome());
      case HomeScreen.id:
        return MaterialPageRoute(builder: (BuildContext context) {
          ScreenArguments argument = args;
          return HomeScreen(
            docid: argument.docid,
            isCaretaker: argument.isCaretaker,
          );
        });
      case LoginScreen.id:
        return MaterialPageRoute(builder: (_) => LoginScreen());
      case Register.id:
        return MaterialPageRoute(builder: (_) => Register());
      case ChatBot.id:
        return MaterialPageRoute(builder: (_) => ChatBot());
      case Todo.id:
        return MaterialPageRoute(builder: (_) => Todo());
    }
  }
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primaryColor: Color(0xff222831),
        accentColor: Color(0xff00adb5),
        textTheme: TextTheme(
          headline1: TextStyle(
              fontSize: 15.0, fontFamily: 'Montserrat', color: Colors.black),
          headline2: TextStyle(
              fontSize: 60.0, fontFamily: 'CrimsonText', color: Colors.black),
          headline3: TextStyle(
              fontSize: 30.0, fontFamily: 'Lora', color: Colors.white),
          headline4: TextStyle(
              fontSize: 30.0, fontFamily: 'Montserrat', color: Colors.white),
        ),
      ),
      initialRoute: Welcome.id,
      routes: {
        'test': (context) => Test(),
        Welcome.id: (context) => Welcome(),
        HomeScreen.id: (context) => HomeScreen(),
        LoginScreen.id: (context) => LoginScreen(),
        Register.id: (context) => Register(),
        ChatBot.id: (context) => ChatBot(),
        Todo.id: (context) => Todo()
      },
    );
  }
}

登录.dart

Button(
                        text: 'LOGIN AS INFIRM ',
                        onPressed: () {
                          doesElderlyExist();
                          print('docid after elderly function call: $docid');
                          if (docid == null) {
                            print('user does not exist');
                          } else {
                            isCaretaker = false;
                            Navigator.pushNamed(context, HomeScreen.id,
                                arguments: ScreenArguments(docid, isCaretaker));
                          }
                        }),

main.dart 中显示的错误 main.dart 中显示的错误

login.dart 中显示的错误 login.dart 中的错误

姆科波利斯

generateRoute函数不知道您的参数是 type ScreenArguments,您应该明确定义:

...
case HomeScreen.id:
  return MaterialPageRoute(builder: (BuildContext context) {
    final argument = args as ScreenArguments;

    return HomeScreen(
      docid: argument.docid,
      isCaretaker: argument.isCaretaker,
    );
  });
...

还有一件事是,您在main.dart其中定义了另一个具有相同名称的类ScreenArguments,请仔细检查并删除未使用的类(根据您的示例,具有reportTitlereportFullPath属性的类是“错误的”类)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我正在尝试使用此参数

我正在尝试使用双指针将字符串传递给函数,但出现错误

我正在尝试使用 momentjs 将变量转换为日期

我正在尝试将Composer与WordPress插件配合使用

我正在尝试使用jquery将美元转换为英镑

我正在尝试将查询中的数组参数传递给servlet。但是,我正在获取java.lang.IllegalArgumentException

如何使用__new__将多个参数传递给类?

如何使用JavaScript XMLHttpRequest将多个参数传递给@RequestBody

使用laravel将多个参数传递给onClick()函数

Python Pandas:使用参数将多个函数传递给agg()

如何使用 | 将多个参数传递给 Ruby 方法?

如何使用按钮将多个参数传递给 WPF 命令?

使用颤振将多个参数传递给命名路由

我正在尝试集中我的 js 脚本,以便我可以在多个页面上重复使用

在使用axios的React中尝试将多个参数传递给获取请求时出现415错误

我正在尝试将多个图像下载为 zip 文件,但使用 laravel 7 时出错

我正在尝试将表格的某些列转置为行。我正在使用 pyspark.sql

我正在尝试将数据从calcArea函数传递给calcCost函数,但是我遇到了麻烦

有没有一种方法可以使用pushNamed将多个索引参数传递给另一个屏幕?

我正在尝试使用 javascript 制作登录屏幕,但打开页面时未加载

我正在尝试创建一个使用C ++中的参数包构造函数的异常类

我正在尝试使用JS / JQuery对网站中的文本自动执行多个查找和替换操作

我正在尝试使用 div 名称作为变量来打开和关闭多个按钮的 div

我正在尝试使用for循环在C#中创建多个数组/字典

我正在尝试使用状态并将用户输入的多个值放入其中

我正在尝试将 ajax 变量传递给数据库

我正在尝试将事件目标值传递给另一个函数

我正在尝试将 javascript Number 类型转换为 BIGINT 以传递给 Postgres 表

我正在尝试将变量传递给 java 中的 cronSchedule 表达式函数