【问题标题】:Call method outside stateful widget to update UI with flutter Bloc在有状态小部件外部调用方法以使用颤振 Bloc 更新 UI
【发布时间】: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?或者简单地说,如何从另一个类更新有状态小部件。

【问题讨论】:

    标签: flutter dart bloc stream-builder


    【解决方案1】:

    This solution of mine 可能会回答您的问题。这就是我解决不同块之间的一些通信问题的方法。您也可以查找继承的小部件,但是,我还没有尝试过。

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 2022-11-12
      • 2023-03-11
      • 2020-10-28
      • 2019-11-29
      • 2021-11-12
      • 1970-01-01
      • 2021-03-11
      • 2021-06-01
      相关资源
      最近更新 更多