首页 > 解决方案 > 被 Cubit Bloc 弄糊涂了,工作正常,但现在不行

问题描述

几周前我的主题被成功更改,但是自从更新颤振后它不再起作用。

BlocProvider 不再起作用,我的 Cubit 也不再起作用。我只是无法理解发生了什么变化。

我收到肘部错误如下.....

'ThemeCubit' 不扩展 'Bloc<Object, Object>'。尝试使用“Bloc<Object, Object>”的子类或子类。

我的主题肘..

class ThemeCubit extends Cubit<ThemeState> {
  ThemeCubit() : super(ThemeStateInitial(themeData: appThemeData.values.first));

  bool themeChanged = false;

  void changeTheme() {
    themeChanged = !themeChanged;
    final newTheme = themeChanged == false
        ? appThemeData.values.first
        : appThemeData.values.last;
    emit(ThemeStateChanged(themeData: newTheme));
  }
}

我的主题状态

abstract class ThemeState {
  const ThemeState();
}

class ThemeStateInitial extends ThemeState {
  final ThemeData themeData;
  const ThemeStateInitial({this.themeData});

  @override
  bool operator ==(Object o) {
    if (identical(this, o)) return true;

    return o is ThemeStateInitial && o.themeData == themeData;
  }

  @override
  int get hashCode => themeData.hashCode;
}

class ThemeStateChanged extends ThemeState {
  final ThemeData themeData;
  const ThemeStateChanged({this.themeData});

  @override
  bool operator ==(Object o) {
    if (identical(this, o)) return true;

    return o is ThemeStateChanged && o.themeData == themeData;
  }

  @override
  int get hashCode => themeData.hashCode;
}

我的用户界面

class AppWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => ThemeCubit(),
      child: BlocBuilder<ThemeCubit, ThemeState>(
          builder: (context, state) {
            SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
              systemNavigationBarColor: state.themeData == ThemeData.dark() ? Colors.black : Colors.white, // navigation bar color
              statusBarColor: state.themeData == ThemeData.dark() ? Colors.white : Colors.black, // status bar color
            ));
            return MaterialApp(
              title: 'Material App',
              theme: state.themeData ??= appThemeData.values.first, 
              home: const Scaffold(
                appBar: PreferredSize(
                  preferredSize: Size.fromHeight(65.0),
                  child: AppBar(mainMenuDisplayed: false),
                ),
              ),
            );
          }),
    );
  }
}

我的按钮...

class TrialButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocProvider.value(
      value: BlocProvider.of<ThemeCubit>(context),
      child: Container(
        width: 100,
        height: 50,
        child: RaisedButton(
          textColor: Colors.white,
          onPressed: () {
            debugPrint("button pressed");
            final themeCubit = context.bloc<ThemeCubit>();
            themeCubit.changeTheme();
          },
          child: Text('PRESS', style: Theme.of(context).textTheme.headline1),
        ),
      ),
    );
  }
}

正如我所说,上周工作正常,但不幸的是已经停止工作,我不确定为什么。

任何帮助将不胜感激。谢谢。

标签: flutterdartbloc

解决方案


推荐阅读