Fluter流不会监听或检测更改

时间:2018-11-23 08:09:54

标签: dart flutter

我有问题,我有3个飞镖文件,

home.dart包含带有onclick的按钮:

final cartEmiter = CartEmitter();
cartEmiter.emitCart("add_cart");

cart.dart包含:

class CartEmitter {
  StreamController _controller = StreamController.broadcast();
  void emitCart(action) {
    _controller.add(action);
    // print(action);
  }

  Stream get cartAction => _controller.stream;
}

在main.dart中,我有这段代码可以更改购物车徽章。

StreamSubscription _cartCountSubscribtion;

int _cartCount = 0;

@override
  void initState() {
    _cartCountSubscribtion = CartEmitter().cartAction.listen((action) {
      print(action);
      setState(() {
         _cartCount++;
      });
    });
    super.initState();
  }

  @override
  void dispose() {
    _cartCountSubscribtion.cancel();
    super.dispose();
  }

但是它不起作用,没有错误,没有输出输出。 我的代码是否错误或如何监听更改?

1 个答案:

答案 0 :(得分:0)

您可以在CartEmitter函数中创建一个新的initState,并在onclick代码中创建另一个。两者之间没有任何连接,因此您通过emitCart调用发出的事件将在与您听的那个不同的CartEmitter发出。

您需要在CartEmitterinitState代码之间共享相同的onclick实例。

或者,如果您知道您将只需要一个CartEmitter,则可以将_controller设为静态,因此在两个控制器之间共享相同的控制器(和流) CartEmitter的所有实例。 在这种情况下,您也可以将emitCartcartAction设为静态,而从不创建任何CartEmitter实例。