Flutter 颤振将主题数据背景设置为LinearGradient
有没有办法将Flutter 颤振将主题数据背景设置为LinearGradient,flutter,colors,themes,Flutter,Colors,Themes,有没有办法将主题数据类的背景色设置为线性渐变?我的应用程序将在不同的主题之间变化,我希望每个主题都有不同的渐变。我尝试将LinearGradient设置为backgroundColor,但给了我一个参数类型“LinearGradient”无法分配给参数类型“Color”。错误 这就是我试过的 final _darkTheme = ThemeData( primarySwatch: Colors.grey, primaryColor: Colors.black, brigh
主题数据
类的背景色
设置为线性渐变?我的应用程序将在不同的主题之间变化,我希望每个主题都有不同的渐变。我尝试将LinearGradient设置为backgroundColor,但给了我一个参数类型“LinearGradient”无法分配给参数类型“Color”。
错误
这就是我试过的
final _darkTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.black,
brightness: Brightness.dark,
// backgroundColor: const Color(0xFF212121),
backgroundColor: const LinearGradient(colors: [Colors.blue, Colors.green]),
accentColor: Colors.white,
floatingActionButtonTheme:
FloatingActionButtonThemeData(foregroundColor: Colors.black),
dividerColor: Colors.black12,
);
有什么建议吗?我不想手动设置每个容器,也不想有一个额外的constants类以某种方式与每个主题关联。这可能不是最好和有效的方法,但却是一个非常简单的解决方案。我在我的主题类中创建了两个变量
mythimes
。根据选定的主题,gradientColorA
和gradientColorB
这两个变量将相应地改变。我只是通过构造函数调用这些变量-TriviaThemes.gradientColorA
这是我的主题课:
class MyThemes {
static Color gradientColorA = Color(0xFFFFFFFF);
static Color gradientColorB = Color(0xFF000000);
ThemeData getTheme(String themeName) {
if (themeName == 'darkTheme') {
gradientColorA = Color(0xFFFFFFFF);
gradientColorB = Color(0xFF000000);
return _darkTheme;
} else if (themeName == 'lightTheme') {
gradientColorA = Color(0xFF000000);
gradientColorB = Color(0xFFFFFFFF);
return _lightTheme;
} else {
return _lightTheme;
}
}
final _darkTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.black,
brightness: Brightness.dark,
accentColor: Colors.white,
floatingActionButtonTheme:
FloatingActionButtonThemeData(foregroundColor: Colors.black),
dividerColor: Colors.black12,
);
final _lightTheme = ThemeData(
accentColor: Colors.black,
backgroundColor: const Color(0xFFE5E5E5),
brightness: Brightness.light,
buttonColor: Colors.blue,
dividerColor: Colors.white54,
disabledColor: Colors.grey,
floatingActionButtonTheme:
FloatingActionButtonThemeData(foregroundColor: Colors.white),
fontFamily: 'Simplifica',
primarySwatch: Colors.grey,
primaryColor: Colors.white,
);
}
这是渐变代码的外观:
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
TriviaThemes.gradientColorA,
TriviaThemes.gradientColorB,
],
),
这可能不是最好和有效的方法,但却是一个非常简单的解决方案。我在我的主题类中创建了两个变量
mythimes
。根据选定的主题,gradientColorA
和gradientColorB
这两个变量将相应地改变。我只是通过构造函数调用这些变量-TriviaThemes.gradientColorA
这是我的主题课:
class MyThemes {
static Color gradientColorA = Color(0xFFFFFFFF);
static Color gradientColorB = Color(0xFF000000);
ThemeData getTheme(String themeName) {
if (themeName == 'darkTheme') {
gradientColorA = Color(0xFFFFFFFF);
gradientColorB = Color(0xFF000000);
return _darkTheme;
} else if (themeName == 'lightTheme') {
gradientColorA = Color(0xFF000000);
gradientColorB = Color(0xFFFFFFFF);
return _lightTheme;
} else {
return _lightTheme;
}
}
final _darkTheme = ThemeData(
primarySwatch: Colors.grey,
primaryColor: Colors.black,
brightness: Brightness.dark,
accentColor: Colors.white,
floatingActionButtonTheme:
FloatingActionButtonThemeData(foregroundColor: Colors.black),
dividerColor: Colors.black12,
);
final _lightTheme = ThemeData(
accentColor: Colors.black,
backgroundColor: const Color(0xFFE5E5E5),
brightness: Brightness.light,
buttonColor: Colors.blue,
dividerColor: Colors.white54,
disabledColor: Colors.grey,
floatingActionButtonTheme:
FloatingActionButtonThemeData(foregroundColor: Colors.white),
fontFamily: 'Simplifica',
primarySwatch: Colors.grey,
primaryColor: Colors.white,
);
}
这是渐变代码的外观:
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
TriviaThemes.gradientColorA,
TriviaThemes.gradientColorB,
],
),
我可以通过在自定义主题类的colorScheme中定义主颜色和次颜色来实现这一点
class AppTheme {
AppTheme._();
static final ThemeData lightTheme = ThemeData(
brightness: Brightness.light,
primarySwatch: Colors.green,
accentColor: Colors.purple[300],
scaffoldBackgroundColor: Colors.grey[100],
colorScheme: ColorScheme.light(
primary: Colors.green,
secondary: Colors.green[100],
),
);
static final ThemeData darkTheme = ThemeData(
brightness: Brightness.dark,
primarySwatch: Colors.green,
accentColor: Colors.purple[300],
colorScheme: ColorScheme.dark(
primary: Colors.green[800],
secondary: Colors.green[600],
),
);
}
在“自定义按钮”小部件中,我将主要设置为渐变开始颜色,次要设置为渐变结束颜色,如下所示:
child:RaisedButton(
标高:8.0,
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(80.0)),
填充:所有边缘设置(0.0),
孩子:墨水(
装饰:盒子装饰(
梯度:线性梯度(
颜色:[
Theme.of(context).colorScheme.primary,
Theme.of(context).colorScheme.secondary,
],
开始:Alignment.centerLeft,
结束:对齐。中间右侧,
),
边界半径:边界半径。圆形(30.0)),
子:容器(
约束:框约束(最小高度:50.0),
对齐:对齐.center,
子:文本(
标题
textAlign:textAlign.center,
样式:TextStyle(颜色:Colors.white),
),
),
),
按下:(){},
),
最后,我得到的是:
我可以通过在自定义主题类的colorScheme中定义原色和副色来实现这一点
class AppTheme {
AppTheme._();
static final ThemeData lightTheme = ThemeData(
brightness: Brightness.light,
primarySwatch: Colors.green,
accentColor: Colors.purple[300],
scaffoldBackgroundColor: Colors.grey[100],
colorScheme: ColorScheme.light(
primary: Colors.green,
secondary: Colors.green[100],
),
);
static final ThemeData darkTheme = ThemeData(
brightness: Brightness.dark,
primarySwatch: Colors.green,
accentColor: Colors.purple[300],
colorScheme: ColorScheme.dark(
primary: Colors.green[800],
secondary: Colors.green[600],
),
);
}
在“自定义按钮”小部件中,我将主要设置为渐变开始颜色,次要设置为渐变结束颜色,如下所示:
child:RaisedButton(
标高:8.0,
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(80.0)),
填充:所有边缘设置(0.0),
孩子:墨水(
装饰:盒子装饰(
梯度:线性梯度(
颜色:[
Theme.of(context).colorScheme.primary,
Theme.of(context).colorScheme.secondary,
],
开始:Alignment.centerLeft,
结束:对齐。中间右侧,
),
边界半径:边界半径。圆形(30.0)),
子:容器(
约束:框约束(最小高度:50.0),
对齐:对齐.center,
子:文本(
标题
textAlign:textAlign.center,
样式:TextStyle(颜色:Colors.white),
),
),
),
按下:(){},
),
最后,我得到的是:
我认为你最好还是接受常量类。有什么特别的原因不想使用它吗?我宁愿只使用已经存在的类的属性,而不是做额外的工作。现在我需要弄清楚如何根据选定的主题选择常量。另外,额外的代码可能会增加出现错误的可能性。@BadrB是否有扩展主题数据的方法?如果我可以为2种颜色的主题数据添加其他属性,那么我可以使用这些颜色,比如:渐变:LinearGradient(颜色:[Theme.of(context).color1,Theme.of(context.color2])。无论主题何时改变,这些值都会相应地改变。我认为最好的选择是只接受常量类。有什么特别的原因不想使用它吗?我宁愿只使用已经存在的类的属性,而不是做额外的工作。现在我需要弄清楚如何根据选定的主题选择常量。另外,额外的代码可能会增加出现错误的可能性。@BadrB是否有扩展主题数据的方法?如果我可以为2种颜色的主题数据添加其他属性,那么我可以使用这些颜色,比如:渐变:LinearGradient(颜色:[Theme.of(context).color1,Theme.of(context.color2])。无论主题何时改变,这些值都会相应地改变。