Navigator.pop() - 如何传递 `context` 以供导航器读取 -
Navigator.pop() - How to pass `context` to be read by the navigator -
我正在学习 flutter 教程,
在这个小部件中,为了使其在输入数据后消失,我将调用导航器 class,
但在本教程中,我必须将无状态小部件转换为有状态小部件,尽管我不需要它。
我可以将 : Navigator.of(context).pop();
与我的无状态小部件一起使用,而不会出现上下文未定义的错误吗?
- 如何传递context
被导航器读取
代码:
import 'package:flutter/material.dart';
class NewTransaction extends StatelessWidget {
final titleController = TextEditingController();
final amountController = TextEditingController();
final Function addNEW;
NewTransaction(this.addNEW);
void submitData() {
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){
return;
}
Navigator.of().pop();
addNEW(
titleController.text,
double.parse(amountController.text),
);
}
@override
Widget build(BuildContext context) {
return Card(
elevation: 5,
child: Container(
padding: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController,
onSubmitted: (_) => submitData(),
),
TextField(
decoration: InputDecoration(labelText: 'Amount'),
keyboardType: TextInputType.numberWithOptions(decimal: true),
controller: amountController,
onSubmitted: (_) => submitData(),
),
FlatButton(
child: Text('Add Transaction'),
onPressed: submitData,
)
],
),
),
);
}
}
使用无状态小部件时,您无法在构建方法之外访问 Context
。
要解决该错误,您可以执行以下操作之一:
1) 将您的 Stateless widget
转换为 Stateful widget
或
2) 将上下文作为参数传递给 submitdata
函数。喜欢下面的代码:
void submitData(BuildContext context) {
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){
return;
}
Navigator.of().pop();
addNEW(
titleController.text,
double.parse(amountController.text),
);
}
所以在 FlatButton
中使用它时,它会像下面这样:
onPressed: submitdata(context),
3) 将 submitdata
函数的主体直接放在按钮的 onPressed
中。
喜欢下面的代码:
onPressed: (){
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){
return;
}
Navigator.of().pop();
addNEW(
titleController.text,
double.parse(amountController.text),
);
}
希望对您有所帮助
我正在学习 flutter 教程,
在这个小部件中,为了使其在输入数据后消失,我将调用导航器 class, 但在本教程中,我必须将无状态小部件转换为有状态小部件,尽管我不需要它。
我可以将 : Navigator.of(context).pop();
与我的无状态小部件一起使用,而不会出现上下文未定义的错误吗?
- 如何传递context
被导航器读取
代码:
import 'package:flutter/material.dart';
class NewTransaction extends StatelessWidget {
final titleController = TextEditingController();
final amountController = TextEditingController();
final Function addNEW;
NewTransaction(this.addNEW);
void submitData() {
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){
return;
}
Navigator.of().pop();
addNEW(
titleController.text,
double.parse(amountController.text),
);
}
@override
Widget build(BuildContext context) {
return Card(
elevation: 5,
child: Container(
padding: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController,
onSubmitted: (_) => submitData(),
),
TextField(
decoration: InputDecoration(labelText: 'Amount'),
keyboardType: TextInputType.numberWithOptions(decimal: true),
controller: amountController,
onSubmitted: (_) => submitData(),
),
FlatButton(
child: Text('Add Transaction'),
onPressed: submitData,
)
],
),
),
);
}
}
使用无状态小部件时,您无法在构建方法之外访问 Context
。
要解决该错误,您可以执行以下操作之一:
1) 将您的 Stateless widget
转换为 Stateful widget
或
2) 将上下文作为参数传递给 submitdata
函数。喜欢下面的代码:
void submitData(BuildContext context) {
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){
return;
}
Navigator.of().pop();
addNEW(
titleController.text,
double.parse(amountController.text),
);
}
所以在 FlatButton
中使用它时,它会像下面这样:
onPressed: submitdata(context),
3) 将 submitdata
函数的主体直接放在按钮的 onPressed
中。
喜欢下面的代码:
onPressed: (){
if (titleController.text.isEmpty || double.parse(amountController.text) <= 0 ){
return;
}
Navigator.of().pop();
addNEW(
titleController.text,
double.parse(amountController.text),
);
}
希望对您有所帮助