将主题数据添加到 flutter 项目时遇到问题

发布于 2025-01-17 10:11:26 字数 4601 浏览 4 评论 0原文

您好,我试图将自定义主题数据添加到 flutter 代码中,但它显示了此错误 我正在使用 flutter_screenutil: ^5.3.1 来实现响应式 UI。请

    #39     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #40     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #41     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #42     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #43     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    2
    ...
    #30749  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30750  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30751  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30752  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30753  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30754  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30755  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30756  MyApp.build.<anonymous closure>
    package:hms/main.dart:45
    #30757  ScreenUtilInit.build.<anonymous closure>
    package:flutter_screenutil/screenutil_init.dart:36
    #30758  _LayoutBuilderElement._layout.layoutCallback
    package:flutter/…/widgets/layout_builder.dart:122
    #30759  BuildOwner.buildScope
    package:flutter/…/widgets/framework.dart:2600
    #30760  _LayoutBuilderElement._layout
    package:flutter/…/widgets/layout_builder.dart:156
    #30761  RenderObject.invokeLayoutCallback.<anonymous closure>
    package:flutter/…/rendering/object.dart:1997
    #30762  PipelineOwner._enableMutationsToDirtySubtrees
    package:flutter/…/rendering/object.dart:918
    #30763  RenderObject.invokeLayoutCallback
    package:flutter/…/rendering/object.dart:1997
    #30764  RenderConstrainedLayoutBuilder.rebuildIfNecessary
    package:flutter/…/widgets/layout_builder.dart:230
    #30765  _RenderLayoutBuilder.performLayout
    package:flutter/…/widgets/layout_builder.dart:319
    #30766  RenderObject.layout
    package:flutter/…/rendering/object.dart:1887
    #30767  RenderView.performLayout
    package:flutter/…/rendering/view.dart:165
    #30768  RenderObject._layoutWithoutResize
    package:flutter/…/rendering/object.dart:1731
    #30769  PipelineOwner.flushLayout
    package:flutter/…/rendering/object.dart:887
    #30770  RendererBinding.drawFrame
    package:flutter/…/rendering/binding.dart:497
    #30771  WidgetsBinding.drawFrame
    package:flutter/…/widgets/binding.dart:883
    #30772  RendererBinding._handlePersistentFrameCallback
    package:flutter/…/rendering/binding.dart:363
    #30773  SchedulerBinding._invokeFrameCallback
    package:flutter/…/scheduler/binding.dart:1144
    #30774  SchedulerBinding.handleDrawFrame
    package:flutter/…/scheduler/binding.dart:1081
    #30775  SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
    package:flutter/…/scheduler/binding.dart:862
    (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
    ════════════════════════════════════════════════════════════════════════════════

主要帮助。 dart

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      designSize: const Size(360, 690),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: () => MaterialApp(
        builder: (context, widget) {
          ScreenUtil.setContext(context);
          return MediaQuery(
            data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
            child: widget!,
          );
        },
        debugShowCheckedModeBanner: false,
        navigatorKey: NavigationService.navigationKey,
        theme: CustomTheme.lightTheme,
        onGenerateRoute: route.generateRoute,
      ),
    );
  }
}

themedata

class CustomTheme {
  static ThemeData get lightTheme {
    return ThemeData(
      primarySwatch: createMaterialColor(const Color(0xff4671c6)),
      colorScheme: lightTheme.colorScheme.copyWith(
        primary: createMaterialColor(const Color(0xff4671c6)),
        secondary: createMaterialColor(const Color(0xff2E8B57)),
      ),
      brightness: Brightness.light,
    );
  }

  static ThemeData get darkTheme {
    return ThemeData(
      brightness: Brightness.dark,
    );
  }
}

createMaterialColor 是一个自定义类,用于将任何颜色转换为材质颜色。 对于导航,我使用 no_context_navigation

如果没有主题,应用程序运行良好,如果没有包,应用程序运行良好,但是当我同时使用包和主题数据时,它会显示此错误。

Hi I was trying to add my custom theme data to flutter code but it shows this error
I am using flutter_screenutil: ^5.3.1 for responsive UI. kindly help

    #39     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #40     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #41     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #42     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #43     CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    2
    ...
    #30749  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30750  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30751  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30752  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30753  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30754  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30755  CustomTheme.lightTheme
    package:hms/util/theme.dart:8
    #30756  MyApp.build.<anonymous closure>
    package:hms/main.dart:45
    #30757  ScreenUtilInit.build.<anonymous closure>
    package:flutter_screenutil/screenutil_init.dart:36
    #30758  _LayoutBuilderElement._layout.layoutCallback
    package:flutter/…/widgets/layout_builder.dart:122
    #30759  BuildOwner.buildScope
    package:flutter/…/widgets/framework.dart:2600
    #30760  _LayoutBuilderElement._layout
    package:flutter/…/widgets/layout_builder.dart:156
    #30761  RenderObject.invokeLayoutCallback.<anonymous closure>
    package:flutter/…/rendering/object.dart:1997
    #30762  PipelineOwner._enableMutationsToDirtySubtrees
    package:flutter/…/rendering/object.dart:918
    #30763  RenderObject.invokeLayoutCallback
    package:flutter/…/rendering/object.dart:1997
    #30764  RenderConstrainedLayoutBuilder.rebuildIfNecessary
    package:flutter/…/widgets/layout_builder.dart:230
    #30765  _RenderLayoutBuilder.performLayout
    package:flutter/…/widgets/layout_builder.dart:319
    #30766  RenderObject.layout
    package:flutter/…/rendering/object.dart:1887
    #30767  RenderView.performLayout
    package:flutter/…/rendering/view.dart:165
    #30768  RenderObject._layoutWithoutResize
    package:flutter/…/rendering/object.dart:1731
    #30769  PipelineOwner.flushLayout
    package:flutter/…/rendering/object.dart:887
    #30770  RendererBinding.drawFrame
    package:flutter/…/rendering/binding.dart:497
    #30771  WidgetsBinding.drawFrame
    package:flutter/…/widgets/binding.dart:883
    #30772  RendererBinding._handlePersistentFrameCallback
    package:flutter/…/rendering/binding.dart:363
    #30773  SchedulerBinding._invokeFrameCallback
    package:flutter/…/scheduler/binding.dart:1144
    #30774  SchedulerBinding.handleDrawFrame
    package:flutter/…/scheduler/binding.dart:1081
    #30775  SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
    package:flutter/…/scheduler/binding.dart:862
    (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
    ════════════════════════════════════════════════════════════════════════════════

main. dart

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      designSize: const Size(360, 690),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: () => MaterialApp(
        builder: (context, widget) {
          ScreenUtil.setContext(context);
          return MediaQuery(
            data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
            child: widget!,
          );
        },
        debugShowCheckedModeBanner: false,
        navigatorKey: NavigationService.navigationKey,
        theme: CustomTheme.lightTheme,
        onGenerateRoute: route.generateRoute,
      ),
    );
  }
}

themedata

class CustomTheme {
  static ThemeData get lightTheme {
    return ThemeData(
      primarySwatch: createMaterialColor(const Color(0xff4671c6)),
      colorScheme: lightTheme.colorScheme.copyWith(
        primary: createMaterialColor(const Color(0xff4671c6)),
        secondary: createMaterialColor(const Color(0xff2E8B57)),
      ),
      brightness: Brightness.light,
    );
  }

  static ThemeData get darkTheme {
    return ThemeData(
      brightness: Brightness.dark,
    );
  }
}

createMaterialColor is a custom class user to convert any color into material color.
For navigation i use no_context_navigation.

Without a theme, the app runs fine and without a package, app runs fine but when I use both package and theme data it shows this error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゃ懵逼小萝莉 2025-01-24 10:11:26

如果要创建一个自定义主题,请尝试以这种方式:

首先创建主题


// Your class with all custom themes
class YourCustomThemeName {
// Your theme name with some examples
  static final exampleTheme = ThemeData(
    // Your primary color
    primaryColor: TNETColors.azulEscuro,

    // Scrolling color
    colorScheme: ColorScheme.fromSwatch().copyWith(
      secondary: TNETColors.cinzaClaro,
    ),

    /// Scaffold color
    scaffoldBackgroundColor: const Color(0xff2E8B57),

    /// Dialog background color
    dialogBackgroundColor: const Color(0xff2E8B57),

    /// Appbar color
    appBarTheme: const AppBarTheme(color: Color(0xff2E8B57)),
  );
}

,然后在MyApp类中使用主题


theme: YourCustomThemeName.exampleTheme,

If you want to create a customized theme try this way:

Firstly create your theme


// Your class with all custom themes
class YourCustomThemeName {
// Your theme name with some examples
  static final exampleTheme = ThemeData(
    // Your primary color
    primaryColor: TNETColors.azulEscuro,

    // Scrolling color
    colorScheme: ColorScheme.fromSwatch().copyWith(
      secondary: TNETColors.cinzaClaro,
    ),

    /// Scaffold color
    scaffoldBackgroundColor: const Color(0xff2E8B57),

    /// Dialog background color
    dialogBackgroundColor: const Color(0xff2E8B57),

    /// Appbar color
    appBarTheme: const AppBarTheme(color: Color(0xff2E8B57)),
  );
}

Then use your theme in your MyApp class like this


theme: YourCustomThemeName.exampleTheme,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文