如何解决有状态小部件外部的调用方法以使用Flutter Bloc更新UI
我已经实现了countetEvent和counterBloc:
abstract class CounterEvent {}
class IncrementEvent extends CounterEvent {}
class DecrementEvent extends CounterEvent {}
和counterBloc:
import 'dart:async';
import 'counter_event.dart';
class CounterBloc {
int _counter = 0;
final _counterStateController = StreamController<int>();
StreamSink<int> get _inCounter => _counterStateController.sink;
Stream<int> get counter => _counterStateController.stream;
final _counterEventController = StreamController<CounterEvent>();
Sink<CounterEvent> get counterEventSink => _counterEventController.sink;
CounterBloc() {
_counterEventController.stream.listen(_mapEventToState);
}
void _mapEventToState(CounterEvent event) {
if (event is IncrementEvent)
_counter++;
else
_counter--;
_inCounter.add(_counter);
}
void dispose() {
_counterStateController.close();
_counterEventController.close();
}
}
在我的main.dart中,我已经声明:
final _bloc = CounterBloc();
我有两个按钮,一个递增,一个递减。减量的工作原理是在main.dart文件中使用时找到,例如soo:
RaisedButton(
onPressed: () =>
_bloc.counterEventSink.add(DecrementEvent()),child: Text("Minus"),)
这将更新bloc和小部件中的变量。但是对于增量,当我从main.dart外部使用函数调用它时,它将增量bloc中的值,但UI不会更新。这就是我的实现方式:
children: [
Button(),/// A stateful widget that returns a button
RaisedButton(
onPressed: () =>
_bloc.counterEventSink.add(DecrementEvent()),),],
这是按钮类:
class Button extends StatefulWidget {
@override
_ButtonState createState() => _ButtonState();
}
class _ButtonState extends State<Button> {
final _bloc = CounterBloc();
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
onPressed: () => _bloc.counterEventSink.add(IncrementEvent()),child: Text("Add"),);
}
}
如何在小部件外部使用bloc事件并更新UI?或者简单地说,如何从另一个类更新有状态的小部件。
解决方法
This solution of mine可能会回答您的问题。这就是我解决了不同模块之间的一些通信问题的方式。您还可以查找继承的小部件,但是,我还没有尝试过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。