flutter - Flutter 对父级的回调抛出 nosuchmethoderror
问题描述
我试图了解回调是如何工作的,并且已经阅读了我能读到的所有内容。但是我的代码不起作用。我有一个显示视图的固定部分的“产品”父级,但是我然后显示“列表”或“编辑”子级。没有productToEdit时显示“list”,有时显示“edit”。要编辑的产品是全局的。
家长
class Products extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _ProductsState();
}
}
class _ProductsState extends State<Products> {
_callBackFromProductEdit() {
print("_callBackFromProductEdit");
setState(() {
});
}
_callBackFromProductList() {
print("_callBackFromProductList");
setState(() {
});
}
Container getProductContainer(){
if(globals.productToEdit.toString() != "null"){
return Container(
child: ProductEditView(callBackToProduct: _callBackFromProductEdit(),),
);
}else{
print('getProductContainer ProductListView' );
return Container(
child: ProductListView(callBackToProductFromList: _callBackFromProductList()),
);
}
}
和孩子
class ProductListView extends StatefulWidget {
final Function callBackToProductFromList;
ProductListView({Key key, this.callBackToProductFromList}) : super(key: key);
@override
State<StatefulWidget> createState() {
return _ProductListState();
}
}
class _ProductListState extends State<ProductListView> {
@override
void initState(){
super.initState();
}
void callingBackToParentFromList(String productId){
print("callingBackToParent");
globals.productToEdit=productId;
print("with ${globals.productToEdit}");
widget.callBackToProductFromList();
}
Widget build(BuildContext context) {
return Container(
--- Lots of layout code ---
child: SizedBox(
width: 50,
height: 20,
child:RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(18.0),),
onPressed: (){
print('edit ${productList[i]['id'].toString()}');
globals.productToEdit=productList[i]['id'].toString();
widget.callBackToProductFromList();
//callingBackToParentFromList(productList[i]['id'].toString());
---- a bit more code -----
),
);
}
}
对我的眼睛和我读到的东西来说,这应该有效。
孩子:ProductListView(callBackToProductFromList:_callBackFromProductList()),
方法
使用 ProductListView 类创建一个子项,该类将 ProductListView 调用的回调函数附加到 Products 方法以在回调时执行。
final Function callBackToProductFromList;ProductListView({Key key, this.callBackToProductFromList}) : super(key: key);
方法
ProductListView 小部件声明了一个名为 callBackToProductFromList 的函数,然后将此函数设置为父必须连接到的函数
然后 widget.callBackToProductFromList();
方法
执行小部件声明的函数。
但是,在按下编辑按钮时,控制台会显示
编辑5E5575221E4B5C28B2EA88DE══╡例外被手势捕获╞════════════════════════════════════════ ═══════════════════════════ 处理手势时抛出以下 NoSuchMethodError:'callBackToProductFromList' 动态调用 null。接收方:“ProductListView”实例参数:[]
所以,我有字符串,但是错误表明 callBackToParentFromList 不作为方法存在。
我的理解显然有差距。如果可能的话,有人可以解释为什么它会被破坏,而不仅仅是编写一个解决方案,因为我相信根据文档我对此的理解是正确的。
解决方案
孩子:ProductListView(callBackToProductFromList:_callBackFromProductList()),
应该
孩子:ProductListView(callBackToProductFromList:_callBackFromProductList),
使用 () 您将立即调用该函数,而不是自行传递该函数
推荐阅读
- c# - 如何在 Razor 页面视图中显示角色列表?
- asp.net - 动态更改 PasswordValidator 设置 Asp.net Mvc
- excel - 如何获取行号然后循环选择范围
- android - 启动画面 - 白色
- android - windowSoftInputMode=“adjustResize”在我的活动中不起作用
- amazon-web-services - 跨 ec2 实例和 Api 网关的 AWS 负载平衡
- azure-devops - TFS Rest API 2018:如何通过 TestManagementHttpClient 查询 SharedSteps 和 TestCase
- extjs - Shopware - Extjs - 如何获取表格元素的值?
- sql-server - 将存储过程参数插入表仅插入第一个字母
- python - python中的三向字典深度合并