Flutter bloc pattern 多次重复调用函数

标签 flutter provider bloc

我正在尝试在 flutter 应用程序中使用 bloc 模式,我在 return Scaffold() 之前将代码写在构建函数的主体内;如下

@override
  Widget build(BuildContext context) {
    final ProductsController pController = Provider.of<ProductsController>(context);
    pController.addProducts();
    return Scaffold();
}

一切都很完美,但功能 addPrducts() 调用了太多次它看起来下面的代码自己重复了很多次

pController.addProducts();

这是 ProductsContoller 类的结构

class ProductsController extends ChangeNotifier {
List<Products> _products=List();
AppDatabase appDB=AppDatabase();
  List<Products> get products=>_products;
addProducts() {
      appDB.getFromTable(AppDatabase.TBL_PRODUCTS).then((rows){
      rows.forEach((row){
        Products product=Products.fromJson(row);
        _products.add(product);


      });
      notifyListeners();
    });
  }
}

最佳答案

如果您的函数只应被调用一次,您应该尝试覆盖 initState() 方法并在那里调用它。如果您的类扩展了一个 StatefulWidget,您的 build(BuildContext context) 方法可能会被调用多次。

final ProductsController pController

@override
void initState() {
    pController = Provider.of<ProductsController>(context);
    pController.addProducts();

    super.initState();
}

关于Flutter bloc pattern 多次重复调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58879324/

相关文章:

flutter - 为什么建议在大型项目中使用 Bloc 模式?

firebase 身份验证未定义类 'OAuthProvider'

text - 在 Flutter 上实现一个 TextSwitcher

flutter - 使用继承的小部件传递小部件 key

flutter - 嵌套的 BlocBuilder() 调用问题

flutter - Bloc-是否可以产生导航堆栈中上一页的状态?

firebase - 在 flutter 中验证电子邮件时不会调用 onAuthStateChanged

android - 抽屉动画报错:'Animation<FractionalOffset>'无法赋值给参数类型 'Animation<Offset>'

asp.net-mvc - 如何使用 ASP.NET MVC 实现自定义缓存提供程序

android - 如果使用 android 工具来重命名包名称而不会出现任何错误/冲突