在有状态小部件外部调用方法以使用颤振 Bloc 更新 UI
Posted
技术标签:
【中文标题】在有状态小部件外部调用方法以使用颤振 Bloc 更新 UI【英文标题】:Call method outside stateful widget to update UI with flutter Bloc 【发布时间】:2021-01-19 00:01:57 【问题描述】:我已经实现了一个 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"),
)
这将更新块中的变量以及小部件。但是对于增量,当我使用函数从 main.dart 外部调用它时,它会增加 bloc 中的值,但 UI 不会更新。这就是我的实现方式:
children: [
Button(), /// A stateful widget that returns a button
RaisedButton(
onPressed: () =>
_bloc.counterEventSink.add(DecrementEvent()),
child: Text("Minus"),
),
],
这是按钮类:
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?或者简单地说,如何从另一个类更新有状态小部件。
【问题讨论】:
【参考方案1】:This solution of mine 可能会回答您的问题。这就是我解决不同块之间的一些通信问题的方法。您也可以查找继承的小部件,但是,我还没有尝试过。
【讨论】:
以上是关于在有状态小部件外部调用方法以使用颤振 Bloc 更新 UI的主要内容,如果未能解决你的问题,请参考以下文章