我是按照翩翩起舞的教程 ,。
在这个widget中,为了使它在输入数据后消失,我将调用navigator类,但在教程中,我将不得不将无状态转换为有状态的widget,尽管我不需要它。
我怎么能用: Navigator.of(context).pop();
与我的无状态的widget,而不会得到错误的上下文没有定义?context
由导航员阅读
CODE:
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),
);
}
希望能帮到你