我有问题,我有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();
}
但是它不起作用,没有错误,没有输出输出。 我的代码是否错误或如何监听更改?
答案 0 :(得分:0)
您可以在CartEmitter
函数中创建一个新的initState
,并在onclick代码中创建另一个。两者之间没有任何连接,因此您通过emitCart
调用发出的事件将在与您听的那个不同的CartEmitter
发出。
您需要在CartEmitter
和initState
代码之间共享相同的onclick
实例。
或者,如果您知道您将只需要一个CartEmitter
,则可以将_controller
设为静态,因此在两个控制器之间共享相同的控制器(和流) CartEmitter
的所有实例。
在这种情况下,您也可以将emitCart
和cartAction
设为静态,而从不创建任何CartEmitter
实例。