我需要改变主题使用状态提供者的Flutter 河舱,我不明白我做错了什么

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const ProviderScope(child: MyApp()));
}

class MyApp extends ConsumerWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final isDarkTheme = ref.watch(isDarkThemeProvider.notifier).state;

    return GestureDetector(
      onTap: () {
        FocusScope.of(context).unfocus();
      },
      child: ScreenUtilInit(
        designSize: const Size(360, 690),
        minTextAdapt: true,
        splitScreenMode: true,
        builder: (context, child) {
          return MaterialApp(
              builder: FToastBuilder(),
              debugShowCheckedModeBanner: false,
              title: 'code',
              theme: isDarkTheme ? Themes().darkTheme : Themes().lightTheme,
              onGenerateRoute: onAppGenerateRoute(),
              routes: appRoutes(),
              initialRoute: SplashPage.route);
        },
      ),
    );
  }
}

这是我的主题类和主题状态提供程序

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:tr_qr_code/utils/colors.dart';

class Themes {
  final ThemeData lightTheme = ThemeData(
    scaffoldBackgroundColor: colorWhite,
    splashColor: Colors.transparent,
    highlightColor: Colors.transparent,
    appBarTheme: const AppBarTheme(color: colorWhite),
    fontFamily: 'OpenSans',
    useMaterial3: true,
  );

  final ThemeData darkTheme = ThemeData(
    scaffoldBackgroundColor: colorBlack,
    splashColor: Colors.transparent,
    highlightColor: Colors.transparent,
    appBarTheme: const AppBarTheme(color: colorBlack),
    fontFamily: 'OpenSans',
    useMaterial3: true,
  );
}

final isDarkThemeProvider = StateProvider<bool>((ref) => false);

在ONTAP内的拨动switch 上,使用以下代码来更新状态

onTap: () {
    
              ref.read(isDarkThemeProvider.notifier).update(
                  (state) => !ref.read(isDarkThemeProvider.notifier).state);
            },

我try 了Flutter 翼清洁,Flutter 翼wine 吧升级等.

推荐答案

在MyApp类中,它应该是 final isDarkTheme = ref.watch(isDarkThemeProvider);

或者,在您的onTap内,您可以像这样切换数值:

onTap: () {
                ref
                    .read(isDarkThemeProvider.notifier)
                    .update((state) => !state);
          },

Flutter相关问答推荐

在Flutter中创建具有固定行的压缩水平列表

在Flutter 动中绘制ECG图

如果文档确实存在,则FiRestore将";False";返回到";if-Document-Existes";...还是我说错了?

如何在Ffltter Chrome应用程序中使用webview_fltter_web显示自定义html而不是外部uri?

Flutter 图标记移动

上传的图像不能在FireBase中预览.S档案类型为空白,摆动

Flutter为什么不;没有ListView.iterable()构造函数?

如何使 dart 函数变得通用?

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

如何从 Flutter 中的 App2 远程点击 App1 中的按钮

如何将此文本按钮剪辑在堆栈中的圆形头像上方?

我在手机上找不到我的 Flutter 应用缓存数据

如何在 Flutter 中测试动画图标

Flutter 构建方法使用的是旧版本的变量?

在 CircleAvatar 中放置芯片

SfCircularChart 周围的额外间距

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

避免长单词中断

Flutter 将方法应用于静态变量

有没有办法帮助我修复类型 null 不是 Map 类型的子类型?