现在,我正在制作一个应用程序,该应用程序具有窗体,窗体中有一个按钮,当我按下 Navigator.pop(context)
时,该按钮将验证并导航用户到堆栈下方的页面
屏幕变黑,或者即使我使用Navigator.pushedName(context, *name of route*)
也显示为空。
为什么会这样,有没有办法解决这个问题。
编辑
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
中的命名路线列表