| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import 'dart:ui';
- import 'package:flutter/material.dart';
- import 'package:flutter/rendering.dart';
- import 'fdefine.dart';
- class FInnerShadow extends SingleChildRenderObjectWidget {
- final double blur;
- final Color color;
- final Offset offset;
- FInnerShadow({
- Key key,
- this.blur = 10,
- this.color = FInnerShadowColor,
- this.offset = FInnerShadowOffset,
- Widget child,
- }) : super(key: key, child: child);
- @override
- RenderObject createRenderObject(BuildContext context) {
- final _ZenUIRenderInnerShadow renderObject = _ZenUIRenderInnerShadow();
- updateRenderObject(context, renderObject);
- return renderObject;
- }
- @override
- void updateRenderObject(
- BuildContext context, _ZenUIRenderInnerShadow renderObject) {
- renderObject
- ..color = color
- ..blur = blur
- ..dx = offset.dx
- ..dy = offset.dy;
- }
- }
- class _ZenUIRenderInnerShadow extends RenderProxyBox {
- double blur;
- Color color;
- double dx;
- double dy;
- @override
- void paint(PaintingContext context, Offset offset) {
- if (child == null) return;
- final Rect rectOuter = offset & size;
- final Rect rectInner = Rect.fromLTWH(
- offset.dx,
- offset.dy,
- size.width,
- size.height,
- );
- final Canvas canvas = context.canvas..saveLayer(rectOuter, Paint());
- context.paintChild(child, offset);
- Paint shadowPaint = Paint()
- ..blendMode = BlendMode.srcATop
- ..imageFilter = ImageFilter.blur(sigmaX: blur, sigmaY: blur)
- ..colorFilter = ColorFilter.mode(color, BlendMode.srcOut);
- canvas
- ..saveLayer(rectOuter, shadowPaint)
- ..saveLayer(rectInner, Paint())
- ..translate(dx, dy);
- context.paintChild(child, offset);
- context.canvas..restore()..restore()..restore();
- }
- }
|