带有控件组的控件 项目问题

项目

嗨, 我最近发现了flutter bloc,现在我试图了解它的工作原理。我的目标是将逻辑与小部件类分开,以便轻松管理我的项目。

问题

我坚持使用经典setState非常简单的方法,但是我试图通过bloc实现这一点。

这是我的一个旧小工具

Widget build(BuildContext context) {
 return AnimatedOpacity(
   duration: Duration(milliseconds: 200),opacity: _opacity,curve: Curves.easeinout,child: Text(
     _currentTitle,style: TitleTextStyle,),);
}

是否可以从集团控制_opacity和_currentTitle?像这样:

List<String> titles = ['title1','title2',....];
int myIndex;

@override
Stream<SomeBlocState> mapEventToState(SomeEvent event,) 
async* {

....
if (event is SomeSpecificEvent)
  setWidgetTitle(titles[myIndex]);
....
}

我正在努力避免为每个可能的标题建立不同的状态,那将是一团糟

谢谢

weiyanyu520 回答:带有控件组的控件 项目问题

您可以尝试在StreamBuilder中构建标题小部件。这将使您分清职责。这样BLoC不会知道任何状态更改或特定于小部件的事情。

Widget build(BuildContext context) {
 return AnimatedOpacity(
      duration: Duration(milliseconds: 200),opacity: _opacity,curve: Curves.easeInOut,child: StreamBuilder<String>(
        stream: myBloc.title,builder: (_,snap) {
          return Text(
            snap?.data ?? 'Some default',style: TitleTextStyle,);
        }
      ),);
}

然后您在BLoC中创建一些逻辑,以根据需要发出标题

List<String> titles = ['title1','title2',....];
int myIndex;
final _myObservableTitles = PublishSubject();

Stream<String> get title => _myObservableTitles.stream;

....
if (event is SomeSpecificEvent)
  _myObservableTitles.add(titles[myIndex]);
....
本文链接:https://www.f2er.com/3147754.html

大家都在问