如何重建特定的窗口小部件属性而不是整个窗口小部件?

时间:2019-11-19 06:59:12

标签: user-interface flutter dart rebuild state-management

我正在制作一个应用程序,并且为了显示循环进度指示器,我使用了modal_progress_hud库,当我将inAsyncCall的状态设置为true或false时,它将在modal_progress_hud中重建其所有子控件。而且我不想一次又一次地重建所有UI。它通过增加GPU的使用率来降低应用程序的效率。还有什么其他方法可以使它更好,我们只需更改属性并仅重建小部件的属性,而不是整个屏幕和其中的小部件即可。

  bool circularindicator = false;
  Color circularColor;
  double circularOpacity;

              child: ModalProgressHUD(
                inAsyncCall: circularindicator,
                child: body,
                color: circularColor,
                opacity: circularOpacity,
              ),

在正文中,我们在列表视图中具有所有小部件。 按下登录按钮后,我们调用了showProgress()方法并设置状态并重建窗口小部件。

  @override
  showProgress() {
    setState(() {
      circularindicator = true;
      circularOpacity = 0.5;
      circularColor = Colors.grey;
    });
  }

1 个答案:

答案 0 :(得分:0)

设置班级StatelessWidget并将Provider Package用于状态管理。在小部件构建功能中,保留 Provider 侦听器 false ,并使用 Consumer Widget 包装可更改的小部件。

 Widget build(BuildContext context) {
  final cart = Provider.of<Cart>(context, listen: false);
  return GridTileBar(
        leading: Consumer<Product>(
          builder: (ctx, product, child) => IconButton(
            onPressed: () {
              product.toggleFavoriteStatus();
            },
            icon: Icon(product.isFavorite ? Icons.favorite : Icons.favorite_border),
            color: Theme.of(context).accentColor,
          ),
        ),
        trailing: IconButton(
          icon: Icon(Icons.shopping_cart),
          onPressed: () {
            cart.addItem(product.id, product.title, product.price);
          },
          color: Theme.of(context).accentColor,
        ),
        backgroundColor: Colors.black87,
        title: Text(product.title),
      );
}

有关提供程序包的更多详细信息:State Management Using Provider