#flutter #navigation #arguments
Вопрос:
Интересно, как мы можем вызвать generateRoute без аргументов на generateroute: RouteGenerator.generateRoute
я ожидал бы: RouteGenerator.generateRoute(настройки)
Спасибо,
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: NumberCreator().stream,
builder: (context, snapshot) {
print('StreamBuilder: ${snapshot.connectionState}');
return MaterialApp(
title: 'Demo',
**onGenerateRoute: RouteGenerator.generateRoute,**
onGenerateInitialRoutes: (String initialRouteName) {
return [
RouteGenerator.generateRoute(
RouteSettings(name: '/', arguments: snapshot)),
];
},
);
});
}
}
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
final args = settings.arguments;
switch (settings.name) {
case '/':
if (args is AsyncSnapshot<int>) {
Ответ №1:
На самом деле вы вызываете не onGenerateRoute
без аргументов, а потому, что передаете параметры, соответствующие ожидаемому типу, RouteFactory
определенному следующим образом в документации flutter:
typedef RouteFactory = Route<dynamic>? Function(RouteSettings settings);
И вы generateRoute
соответствуете этому типу, поскольку это функция, которая принимает RouteSettings
параметр и возвращает объект типа Route<dynamic>
.
Вот код, который я использовал в своих проектах:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo',
initialRoute: /*<my_initial_route */,
onGenerateRoute: MyRouter.generateRoute,
);
}
}
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
// your cases ...
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text('No route defined for ${settings.name}'),
),
),
);
}
}
}