Теперь я создаю приложение, в котором есть форма и внутри него кнопка, которая при нажатии должна проверять и направлять пользователя к какой-либо странице под стеком, но всякий раз, когда я использую Navigator.pop(context)
, экран становится черным или даже если я использую Navigator.pushedName(context, *name of route*)
, отображается ноль.
Почему это происходит и есть ли способ решить эту проблему.
EDIT
class Diary extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
elevation: 0,
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: (){
Navigator.pop(context);
},
),
),
body: DiaryForm(),
),
);
}
}
class DiaryForm extends StatefulWidget {
@override
_DiaryFormState createState() => _DiaryFormState();
}
class _DiaryFormState extends State<DiaryForm> {
final _diaryKey=GlobalKey<FormState>();
String title;
String diary;
@override
Widget build(BuildContext context) {
final serviceViewModelProvider=Provider.of<ServiceViewModel>(context,listen:false);
return Form(
key: _diaryKey,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: ListView(
children: <Widget>[
Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
keyboardType: TextInputType.text,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Title',
),
maxLength: 50,
validator: (value){
if(value.length<=3){
return 'Title should be atleast three character long';
}
return null;
},
onChanged: (value){
setState(() {
title=value;
});
},
),
),
Flexible(
fit: FlexFit.loose,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
keyboardType: TextInputType.multiline,
maxLines: null,
maxLength: 800,
maxLengthEnforced: true,
minLines: 13,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Tell me what happened ...',
helperText: 'Try to follow in character length limit'
),
validator: (value){
if(value.length<=20){
return 'Atleast write 20 words ';
}
return null;
},
onChanged: (value){
setState(() {
diary=value;
});
},
),
),
),
FlatButton(
child:Text('Validate'),
onPressed: (){
print(diary);
if(_diaryKey.currentState.validate()){
print('Validate');
serviceViewModelProvider.setData(title, diary, DateTime.now());
Navigator.pop(context);
// if(Provider.of<User>(context,listen: false) != null){print(Provider.of<User>(context,listen: false).uid);}
_diaryKey.currentState.reset();
}
},
)
],
)
],
),
),
);
}
}
Вы можете видеть, что у меня есть одна кнопка arrow_back и одна кнопка в виджете формы, но они предназначены для выполнения той же задачи - возврата к предыдущему экрану. Хотя последняя кнопка не работает, и всякий раз, когда я ее нажимаю, экран становится черным, а первая работает. И еще одна вещь, даже если я использую Navigator.pushedName
, он показывает нет маршрута с таким именем.
initialRoute: '/wrapper',
routes: {
'/wrapper':(context)=>Wrapper(),
'/signIn' :(context)=>SignIn(),
'/signUp' :(context)=>SignUp(),
'/diary' :(context)=>Diary(),
'/home' :(context)=>Home()
},
Это список именованных маршрутов в main .dart