flutter 如何根据共享首选项中的Bloc加载主题更新Tab控制器长度

wyyhbhjk  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(111)

我有一个家庭Bloc,它是从preferences包加载List<String>,然后我想更新我的TabBar和TabBarView的基础上,所以我需要首先设置TabController长度,但我不知道如何执行它这里是我的代码。

HomeDataState
abstract class HomeDataState {}

class HomeDataInitialState extends HomeDataState{}

class HomeDataLoadingState extends HomeDataState {}

class HomeDataLoadedState<T> extends HomeDataState {
  final T data;
  HomeDataLoadedState({required this.data});
}

class HomeDataErrorState extends HomeDataState {
  final String error;

  HomeDataErrorState({required this.error});

}
BLOC
Future<void> _loadAllFeed(
    HomeLoadAllFeed event,
    Emitter<HomeBlocState> emit,
  ) async {
    log('loading home feed..');

    /// emit loading all data
    emit(state.copyWith(
        newHeadLineState: HomeDataLoadingState(),
        newTopicDataState: HomeDataLoadingState()));

    /// fetches the headline news for country
    final headLineResponse = await _newsRepository.fetchHeadLineNews();

    /// gets the first topic from selected list
    final List<String>? userTopics = await _prefOperator.getUserTopics();
    topics = userTopics??[];

    /// gets the news based on the topic
    final firstTopicNews =
        await _newsRepository.getNewsBaseOnTopic(userTopics?.first ?? 'Car');

    /// if states was success for both
    if (headLineResponse is DataSuccess && firstTopicNews is DataSuccess) {
      emit(
        state.copyWith(
            newHeadLineState: HomeDataLoadedState(data: headLineResponse.data),
            newTopicDataState: HomeDataLoadedState(data: firstTopicNews.data),
            newUserTopicDataState: HomeDataLoadedState(data: userTopics)),
      );
    

  }

直到现在一切都还可以,但我不知道如何给予我的TabController长度在Ui。
当我使用context.watch

时出现这个错误

wswtfjt7

wswtfjt71#

使用context.read(),因为一旦控制器在init方法中初始化,一旦状态发生变化,它就不能处理任何监视函数,而您所做的就是给予控制器一次值

相关问题