Проблема в том, что я не могу передать значения моего собственного класса ForceSelection с другого экрана на StatefulWidget другого экрана. Он отлично работает в StatelessWidget. Я пытался извлечь уроки из этого учебника по флаттеру: https://flutter.dev/docs/cookbook/navigation/passing-data#4-navigate-and-pass-data-to-the-detail-screen
У меня есть такой класс в levelSelection.dart
class ForceSelection {
final String forceSelection;
final String langSelection;
ForceSelection(this.forceSelection, this.langSelection);
}
Я пытаюсь передать значения в следующий файл PlayQuiz.dart
Game(forceSelection: ForceSelection('maa', 'fin'))
game.dart выглядит так:
class Game extends StatelessWidget {
final ForceSelection forceSelection;
Game({Key key, @required this.forceSelection}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: forceSelection.langSelection, // TODO should work and change later
theme: new ThemeData(
primaryColor: Colors.white,
),
home: PlayQuiz(),
);
}
}
И я хочу передать значения ForceSelection в PlayQuiz().
class PlayQuizState extends State<PlayQuiz> {
Game.forceSelection // <--- How can I get the value out of here?
}
class PlayQuiz extends StatefulWidget {
@override
PlayQuizState createState() => new PlayQuizState();
}
Весь код можно найти здесь: https://pastebin.com/nKssz42R а также levelSelection.dart: https://pastebin.com/8QbBD0A2
Сработало ли мое решение для вас.
Попробуйте этот код
Добавлен аргумент forceSeleton в PlayQuiz().
class Game extends StatelessWidget {
final ForceSelection forceSelection;
Game({Key key, @required this.forceSelection}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: forceSelection.langSelection, // TODO should work and change later
theme: new ThemeData(
primaryColor: Colors.white,
),
home: PlayQuiz(forceSelection),
);
}
}
Викторина в игре
class PlayQuiz extends StatefulWidget {
final ForceSelection forceSelection;
PlayQuiz(this.forceSelection);
@override
PlayQuizState createState() => new PlayQuizState(forceSelection);
}
In PlayQuizState
class PlayQuizState extends State<PlayQuiz> {
ForceSelection forceSelection;
PlayQuizState(ForceSelection forceSelection) {
this.forceSelection = forceSelection;
}
}
Вы хотите перейти от родителя -> ребенка или ребенка -> родителя?