创建一个不使用ThemeData的深色主题

问题描述 投票:0回答:1

我创建了一个名为theme.dart的飞镖文件,在其中我所有的colors以及我的font sizestext styles都放在了那里。

我的theme.dart看起来像这样:

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

//COLORS
const colorPrimary = Color(0xFF913f91);
const colorPrimaryLight = Color(0xFFed74ed);
const colorSecondary = Color(0xFF1fb4ac);
const colorSecondaryLight = Color(0xFF3ee6dc);
const colorTertiary = Color(0xFFff8519);
const colorTertiaryLight = Color(0xFFf7a963);
const colorPositive = Color(0xFF00d96f);
const colorNegative = Color(0xFFFF4464);
const colorNegativeDark = Color(0xFFff8095);
const colorDisabled = Color(0xFFC1C1C1);
const colorOffWhite = Color(0xFFf2f2f2);
const colorOffBlack = Color(0xFF222222);
const colorText = Color(0xFF222222);
const colorAqua = Color(0xFF19c4fc);
const colorAquaDark = Color(0xFF09a7db);
const colorDarkBlue = Color(0xFF00649e);
const colorBlue = Color(0xFF1fadff);
const colorYellow = Color(0xFFfff021);
const colorYellowLight = Color(0xFFfff354);
const gradientTop = Color(0xFFFFD560);
const gradientBottom = Color(0xFFFF8519);
const colorShadowDark = Color(0xFF090909);


//FONT SIZE
const fontSizeRegular = 18.0;
const fontSizeSmall = 12.0;
const fontSizeMedium = 15.0;
const fontSizeSmallest = 10.0;
const fontSizeLarge = 22.0;
const fontExtraLarge = 30.0;

//TEXT STYLES
textHeaderStyle(Color _color, FontStyle _fontStyle, FontWeight _fontWeight) {
  return TextStyle(
      fontSize: ScreenUtil().setSp(fontSizeLarge),
      color: _color,
      fontStyle: _fontStyle,
      fontWeight: _fontWeight);
}

例如,我在[设置]菜单中有switch的说法,可以在暗模式和亮模式之间切换。

什么是最好的方法?

如果我在像这样的颜色上添加条件:

const colorPrimary = mode == "light" ? Color(0xFF913f91) : Color(0xFFed74ed);

其中“模式”是全局变量,每次在“设置”菜单中切换setState()时,我都会添加一个switch,它将起作用吗?

我很乐意尝试您的所有建议。

感谢能提供帮助的人!

flutter dart flutter-layout flutter-theme
1个回答
0
投票

我能想到的更简单的解决方案;您可以在调用时使用bool选择主题模式,如果设置为true,则可以设置明亮的主题颜色,如果使用假的深色主题颜色和关键部分,则需要将其与shared preferences一起存储以应用整个应用并制作它是永久的,我的意思是即使用户靠近应用程序也可以再次设置用户设置,然后重新启动它。

因此您可以在主题飞镖中使用bool:

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

    //COLORS
    colorPrimary = mode ? Color(0xFFed74ed) : Color(0xFF913f91);
    colorSecondary = mode ? Color(0xFF3ee6dc) : Color(0xFF1fb4ac);
    colorTertiary = mode ? Color(0xFFf7a963): Color(0xFFff8519);
    ...

然后,您不必每次创建“全局变量”,只需说您可以在“设置”菜单中每次切换开关即可添加setState()。

© www.soinside.com 2019 - 2024. All rights reserved.