解决Flutter中ThemeData.primaryColor在AppBar等组件中不生效

升级Flutter到2.10.5后,发现所有页面的AppBar颜色变为默认蓝色,原因是从Flutter 2.5开始,ThemeData.primaryColor不再影响所有组件。解决方法是在MaterialApp中设置colorScheme,同时指定primaryColor和primarySwatch,确保颜色一致。

出现场景

闲着没事,将Flutter SDK升级到了2.10.5,结果发现app所有页面的AppBar颜色全变成了默认的蓝色,在MaterialApp中设置的primaryColor颜色没有生效。

MaterialApp(
	theme: ThemeData(
	  primaryColor: Colors.green,
	),
)

在这里插入图片描述

解决方法

通过Flutter的github issues发现,从Flutter 2.5开始,Flutter团队开始慢慢移除ThemeData.primaryColor属性对所有组件的影响,取而代之的是基于ColorScheme的Color。

MaterialApp(
	theme: ThemeData(
	  primaryColor: Colors.green,
	  colorScheme: ColorScheme.light().copyWith(primary: Colors.green),
	),
)

在这里插入图片描述
如果想要所有组件保持统一主题,目前可以使用以下代码达到统一。

class MyApp extends StatelessWidget 
Flutter 里,`paint.shader` 可用于为绘制的图形应用着色器效果,着色器能实现渐变、纹理等特殊视觉效果。以下是使用方法和示例: ### 使用方法 1. **创建着色器对象**:Flutter 提供了多种着色器类型,像 `LinearGradient`、`RadialGradient`、`SweepGradient` 等,可按需创建。 2. **将着色器赋值给 `paint.shader`**:创建 `Paint` 对象后,把创建好的着色器赋给 `paint.shader` 属性。 3. **使用 `paint` 进行绘制**:在 `CustomPainter` 的 `paint` 方法里,用设置了着色器的 `paint` 对象绘制图形。 ### 示例代码 ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Shader Example'), ), body: Center( child: CustomPaint( painter: ShaderPainter(), size: Size(200, 200), ), ), ), ); } } class ShaderPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { // 创建线性渐变着色器 final shader = LinearGradient( colors: [Colors.red, Colors.blue], begin: Alignment.topLeft, end: Alignment.bottomRight, ).createShader(Rect.fromLTWH(0, 0, size.width, size.height)); // 创建 Paint 对象并设置着色器 final paint = Paint() ..shader = shader; // 使用 paint 绘制矩形 canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paint); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) { return false; } } ``` 在这个示例中,首先创建了 `LinearGradient` 着色器,然后将其赋值给 `paint.shader`,最后用这个 `paint` 对象绘制矩形,矩形就会显示线性渐变效果。 ### 原理 着色器本质上是一种程序,它会根据特定算法计算每个像素的颜色值。在 Flutter 里,内置的着色器类会依据用户设定的参数(如颜色、起始点、结束点等)生成对应的着色器程序,绘制时,Flutter 会调用这个程序计算每个像素的颜色,从而实现特殊的视觉效果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值