#flutter #routes #navigation #switch-statement #arguments
#флаттер #маршруты #навигация #оператор переключения #аргументы
Вопрос:
Итак, я следую руководству и забегаю вперед, но мне бы очень хотелось, чтобы это работало. Я переместил навигацию в ‘routes_constants.dart’ и ‘routes.dart’. Константы, если все в порядке. Маршруты — это то, где я столкнулся с проблемой. Потратив несколько часов на то, чтобы найти и изучить себя, я прошу о помощи.
У меня есть «Экран питания» с «категорией окончательной категории». Проблема заключается в вызове требуемой категории в маршрутах.стрелочный переключатель / регистр / код по умолчанию.
Я разместил код из маршрутов.стрелок ниже. Для тех из вас, кто знает этот «материал», я уверен, что это просто … и скоро, я надеюсь, это будет и для меня. Заранее благодарю вас за любую помощь, которую вы могли бы оказать.
Это сообщения об ошибках / справки. Я пытался и пытался, но не смог победить это! Начало сообщения: (новый) FoodScreen FoodScreen( Set set, { требуемая категория категория, объект? аргумент, }) пакет:myapp/models/food_screen.dart
Именованный параметр ‘category’ является обязательным, но соответствующего аргумента нет. Попробуйте добавить требуемый аргумент. Конец сообщения.
маршруты.выделите код ниже:
import 'package:flutter/material.dart';
import 'package:myapp/models/category.dart';
import 'package:myapp/models/category_screen.dart';
import 'package:myapp/models/category_item.dart';
import 'package:myapp/models/food_screen.dart';
import 'package:myapp/routes/route_constants.dart';
Route<dynamic> generateRoute(RouteSettings routeSettings) {
// Getting arguments passed in while calling Navigator
final args = routeSettings.arguments;
switch (routeSettings.name) {
case RouteNames.CategoryScreenRoute:
return MaterialPageRoute(builder: (context) => CategoryScreen());
case RouteNames.FoodScreenRoute:
return MaterialPageRoute(builder: (context) => FoodScreen(??? THIS NEEDS FIX ???));
default:
return MaterialPageRoute(builder: (context) => CategoryScreen());
}
}
Экран питания.выделите код ниже:
import 'package:flutter/material.dart';
import 'package:myapp/models/category.dart';
class FoodScreen extends StatelessWidget {
final Category category;
FoodScreen(
Set set, {
required this.category,
Object? argument,
});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.black,
title: Text('${category.content}'),
),
body: Center(
child: Text(
'Category: ${category.content}',
style: TextStyle(fontSize: 24),
),
),
);
}
}
Комментарии:
1. Попробуйте прочитать это .
Ответ №1:
Я тоже новичок в Flutter, но я считаю, что если цель состоит в том, чтобы передать category
вашему FoodScreen
, когда вы вызываете его с помощью Navigator
, вы можете сделать следующее:
routes.dart:
...
case RouteNames.FoodScreenRoute:
return MaterialPageRoute(builder: (context) => FoodScreen(
category: ModalRoute.of(context)!.settings.arguments as Category
));
...
FoodScreen.dart:
import 'package:flutter/material.dart';
import 'category.dart';
class FoodScreen extends StatelessWidget {
final Category category;
const FoodScreen({
Key? key,
required this.category,
}) : super(key: key); // I believe its best to give widgets keys
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.black,
title: Text('${category.content}'),
),
body: Center(
child: Text(
'Category: ${category.content}',
style: TextStyle(fontSize: 24),
),
),
);
}
}
Тогда, я думаю, вы сможете вызвать свой FoodScreen
using
Navigator.pushNamed(context, RouteNames.FoodScreenRoute,
arguments: category); //where this category has been declared earlier
};
Я не могу проверить это, пока не вернусь домой, но дайте мне знать, если это сработает.
Комментарии:
1. Я действительно ценю помощь. Извините за задержку, не удалось протестировать ваш код до сегодняшнего утра. Все еще возникает проблема, почти такая же проблема, где маршруты. похоже, что регистр / возврат dart никогда не имеет «связи» с аргументом в нижнем регистре «категория».
2. Я перехожу на github, чтобы посмотреть из некоторого кода flutter / routes / argument. Еще раз спасибо… Я буду продолжать пытаться: (