首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter CallBack函数

Flutter CallBack函数
EN

Stack Overflow用户
提问于 2020-07-10 22:14:13
回答 1查看 2K关注 0票数 2

我有一个数量需要在父小部件中更新。按子小部件中的+或- Icon时需要更新数量。我将回调函数传递给子无状态小部件,但它不起作用。相反,我得到一个错误,说在构建过程中调用了setstate()或markneedsbuild()。

这是父小部件

代码语言:javascript
复制
class Wash extends StatefulWidget {
  @override
  _WashState createState() => _WashState();
}

class _WashState extends State<Wash> {
   int quantity = 0;

   void updateQuantity(command) {
     if (command == 'add') {
       setState(() {
        quantity++;
       });
     } else {
      setState(() {
       quantity--;
     });
    }  
   }

 @override
 Widget build(BuildContext context) {
   return Scaffold(
    body: OrderTile(
          imgPath: 'shorts',
          itemType: 'Shorts',
          quantityCallBack: updateQuantity,
        ),
   );
 }

这是子小部件

代码语言:javascript
复制
class OrderTile extends StatelessWidget {
OrderTile({this.itemType, this.imgPath, this.quantityCallBack});

final String imgPath;
final String itemType;
final Function quantityCallBack;

@override
Widget build(BuildContext context) {
return Padding(
  padding: EdgeInsets.all(12.0),
  child: Row(
    children: <Widget>[
      Expanded(
        flex: 1,
        child: CircleAvatar(
          backgroundImage: AssetImage('images/${imgPath}.jpg'),
          radius: 30.0,
        ),
      ),
      Expanded(
        flex: 3,
        child: _Description(
          title: itemType,
        ),
      ),
      GestureDetector(
        onTap: quantityCallBack('add'),
        child: Icon(
          Icons.add,
          size: 24.0,
        ),
      ),
      SizedBox(
        width: 14,
      ),
      Text('1'),
      SizedBox(
        width: 14,
      ),
      GestureDetector(
        onTap: quantityCallBack('remove'),
        child: Icon(
          Icons.remove,
          size: 24.0,
        ),
      ),
    ],
  ),
);
}
}

我为函数回调实现做的事情是正确的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-10 22:45:44

您在onTap回调中以错误的方式调用回调函数。更改:

代码语言:javascript
复制
onTap: quantityCallBack('add'),

代码语言:javascript
复制
onTap: () => quantityCallBack('add'),

如果它们具有相同的类型,则只能以传递的方式传递函数。在本例中,onTapvoid function(),它没有任何参数。

另外,您没有将更新后的quantity值传递给Text Widget

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62836210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档