Я реализовал 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();
}
}
и в My main.dart я заявил:
final _bloc = CounterBloc();
У меня есть две кнопки: одна для увеличения, а другая для увеличения. декремент работает, просто найдите его при использовании в файле main.dart, например soo:
RaisedButton(
onPressed: () =>
_bloc.counterEventSink.add(DecrementEvent()),
child: Text("Minus"),
)
Это обновит переменную в блоке, а также виджет. Но для приращения, когда я вызываю его извне main.dart с помощью функции, он увеличивает значение в блоке, но пользовательский интерфейс не обновляется. Вот как я это реализую:
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"),
),
);
}
}
Как я могу использовать события блока вне виджета и обновлять пользовательский интерфейс? Или, проще говоря, как я могу обновить виджет с отслеживанием состояния из другого класса.