Передача данных с одного экрана на другой во Флаттере является нулевой
У меня есть два экрана, с одного я хочу передать строку заголовка на другой экран. Этот заголовок можно войти или зарегистрироваться, предварительно решив на первом экране. Что я пробовал:
Container(
child: RaisedGradientButton(
onPressed: () {
print('Login clicked');
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
MyApp(
formMode: FormMode.LOGIN,
screenTitle: "Login",
)
),
);
},
textButton: "Login",
height: 55,
width : 200.0,
buttonTitleColor: Colors.white,
buttonBackgroundColor: Colors.red,
)
),
Ниже показан второй экран с этапами инициализации:
enum FormMode { LOGIN, SIGNUP }
void main() {
runApp(
MaterialApp(
home: StatelessLanding(),
),
);
}
class MyApp extends StatelessWidget{
// In the constructor, require a Todo
final FormMode formMode;
final String screenTitle;
MyApp({Key key, @required this.formMode, @required this.screenTitle})
: super(key: key);
@override
Widget build(BuildContext context){
return MyAppStateFul();
}
}
class _MyAppStateFulState extends State<MyAppStateFul> {
FormMode formMode;
String screenTitle;
_MyAppStateFulState(FormMode formMode, String screenTitle) {
this.formMode = formMode;
this.screenTitle = screenTitle;
}
}
Это место, где я использую заголовок экрана:
@override
Widget build(BuildContext context) {
var screenTitle = "Login";
print('screen title is $widget.screenTitle');
print('screen title is $this.screenTitle');
print('screen title is $screenTitle');
}
Может эксперты, пожалуйста, помогите мне. Спасибо
1 ответ
Код немного сложен для исполнения, но похоже, что вы забыли передать screenTitle
из MyApp
класс к MyAppStateful
виджет.
В приведенном выше коде у вас есть следующий виджет без сохранения состояния:
class MyApp extends StatelessWidget{
// In the constructor, require a Todo
final FormMode formMode;
final String screenTitle;
MyApp({Key key, @required this.formMode, @required this.screenTitle}) : super(key: key);
@override
Widget build(BuildContext context) {
return MyAppStateFul();
}
}
Мне кажется, вам придется пройти screenTitle
к MyAppStateFul
конструктор, чтобы сделать его доступным в виджете с отслеживанием состояния, например так:
@override
Widget build(BuildContext context) {
return MyAppStateFul(screenTitle);
}
Конечно, это также требует от вас изменить MyAppStateFul
конструктор, чтобы принять screenTitle
параметр, если это не так.
Я думаю, что это должно исправить это для вас.