我有一个图标按钮,点击它将固定/取消固定窗口,图标将根据固定或不固定而变化.第一次单击该按钮将触发重建事件,但后续单击不会.我对此一无所知.

我在这里创建了一个最小的示例:https://gist.github.com/TENX-S/7a811cb23b3b0ed220b75f4b2cda7fd3,用于repo:https://github.com/TENX-S/miniexample

我试着阅读https://bloclibrary.dev/的文档,但我没有得到答案.

enter image description here

推荐答案

  • 问题是SettingsCubit的实现

  • Link to the output

  • 下面是我对你的设置的更新版本.dart

@JsonSerializable()
class Settings {

  final bool alwaysOnTop;

  Settings({required this.alwaysOnTop});

  const Settings._({
    this.alwaysOnTop = false,
  });

  const Settings.initial() : this._();

  const Settings.update(bool onTop): this._(alwaysOnTop: onTop);

  factory Settings.fromJson(Map<String, dynamic> json) => _$SettingsFromJson(json);

  Map<String, dynamic> toJson() => _$SettingsToJson(this);

}

class SettingsCubit extends HydratedCubit<Settings> {
  SettingsCubit() : super(const Settings.initial());

  set alwaysOnTop(bool pinned) => emit(Settings.update(pinned));

  bool get alwaysOnTop => state.alwaysOnTop;

  @override
  Settings? fromJson(Map<String, dynamic> json) {
    return Settings.fromJson(json);
  }

  @override
  Map<String, dynamic>? toJson(Settings state) {
    return state.toJson();
  }
}

  • 您的主页构建方法
@override
  Widget build(BuildContext context) {
    final settingsCubit = context.read<SettingsCubit>();
    return Scaffold(
      body: Center(
        child: IconButton(
          icon: settingsCubit.alwaysOnTop ? const Icon(FluentIcons.pin_24_filled): const Icon(FluentIcons.pin_24_regular),
          onPressed: () {
            settingsCubit.alwaysOnTop = !widget.pinned;
          },
        ),
      ),
    );
  }

Flutter相关问答推荐

Flutter bloc -如何使用BlocBuilder?

Flutter 导致底部溢出

当第二页在单独的小工具中使用Navigator.pop时,Navigator.push不起作用

为什么他们实例化类,然后丢弃该实例?

允许冻结在初始化时使用工厂

我不能通过第5步了解Flutter 翼Firebase教程

Android上火焰瓷砖之间的线条飘动

SingleChildScrollView在ErrorWidget.builder中不工作

NotifierProvider 每次更新都会重新构建并且值不更新

断言失败:std::move(hal_2_1_verifier).Run(). 初始化,LE音频客户端至少需要Bluetooth音频HAL V2.1

Flutter底部面板局部显示

在 Flutter 中更改喜欢按钮的 colored颜色

Flutter url_launcher 插件抛出java.lang.IllegalArgumentException:接收器未注册:io.flutter.plugins.urllauncher.WebViewActivity

小部件堆栈未显示顶层

如何为文本主题设置多种 colored颜色 ?

无法在 flutter 中更新 void 方法内的变量值

有任何方法可以在应用程序移动背景恢复时显示 appopenAd

在flutter web中重新加载页面时保留一些状态数据的有效方法是什么?

为什么这个参数类型不能分配给参数类型?

单击列表视图导航到 Flutter 中的另一个页面