我正在尝试按照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));
}
}),
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
,请仔细检查并删除未使用的类(根据您的示例,具有reportTitle
和reportFullPath
属性的类是“错误的”类)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句