import 'package:flutter/material.dart'; class CustomPaintRoute extends StatelessWidget { @override Widget build(BuildContext context) { final width=MediaQuery.of(context).size.width; final height=MediaQuery.of(context).size.height; return Center( child: CustomPaint( size: Size(width, height), //指定画布大小 painter: MyPainter(), ), ); } } class MyPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { double eWidth = size.width / 15; double eHeight = size.height / 25; //網格背景 var paint = Paint() ..isAntiAlias = true ..style = PaintingStyle.fill //填充 ..color = Color(0xfff6f6f6); //背景为纸黄色 canvas.drawRect(Offset.zero & size, paint); //網格風格 paint ..style = PaintingStyle.stroke //线 ..color = Color(0xffe1e9f0) ..strokeWidth = 1.1; for (int i = 0; i <= 40; ++i) { double dy = eHeight * i; canvas.drawLine(Offset(0, dy), Offset(size.width, dy), paint); } for (int i = 0; i <= 20; ++i) { double dx = eWidth * i; canvas.drawLine(Offset(dx, 0), Offset(dx, size.height), paint); } } @override bool shouldRepaint(CustomPainter oldDelegate) => true; }
使用效果
抽屉毛玻璃效果
drawer: Container( width*0.7, height: height, color: Colors.transparent, child: ClipRect( child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 5.0,sigmaY: 5.0), child: Opacity(//设置透明度 opacity: 0.8,//半透明 child: Container( width*0.8, height: height, decoration: BoxDecoration(color: Colors.white), ), ), ), ) )
github.com/Loudsa/flutter_ca