gpt4 book ai didi

flutter - 在有状态小部件外部调用方法以使用 flutter Bloc 更新 UI

转载 作者:行者123 更新时间:2023-12-03 04:35:23 24 4
gpt4 key购买 nike

我已经实现了一个 countetEvent 和 counterBloc:

abstract class CounterEvent {}

class IncrementEvent extends CounterEvent {}

class DecrementEvent extends CounterEvent {}
和柜台:
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"),
)
这将更新 block 中的变量以及小部件。但是对于增量,当我使用函数从 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?或者简单地说,如何从另一个类更新有状态小部件。

最佳答案

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

关于flutter - 在有状态小部件外部调用方法以使用 flutter Bloc 更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com