J'essaie de créer un widget qui rend l'un des cercles montrés dans ce image . C'est un cercle transparent avec une ombre de boîte. Le cercle doit indiquer la couleur ou l'image d'arrière-plan appliquée au conteneur parent. Le cercle est transparent mais ce que je vois est ceci : une ombre de boîte noire et non la couleur d'arrière-plan du parent. Aucune suggestion?
Voici ce que j'ai jusqu'à présent:
class TransParentCircle extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: new Center(
child: new Container(
decoration: new BoxDecoration(
border: new Border.all(width: 1.0, color: Colors.black),
shape: BoxShape.circle,
color: Colors.transparent,
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.black,
offset: Offset(1.0, 6.0),
blurRadius: 40.0,
),
],
),
padding: EdgeInsets.all(16.0),
),
),
width: 320.0,
height: 240.0,
margin: EdgeInsets.only(bottom: 16.0));
}
}
Comme vous pouvez le voir dans la classe BoxShadow
, ils sous-classent la méthode toPaint()
comme ceci:
Paint toPaint() {
final Paint result = Paint()
..color = color
..maskFilter = MaskFilter.blur(BlurStyle.normal, blurSigma);
assert(() {
if (debugDisableShadows)
result.maskFilter = null;
return true;
}());
return result;
}
... avec BlurStyle.normal
au lieu de BlurStyle.outer
comme nous le voulions.
Créons simplement un BoxShadow
personnalisé qui prend le BlurStyle
comme paramètre.
import 'package:flutter/material.Dart';
class CustomBoxShadow extends BoxShadow {
final BlurStyle blurStyle;
const CustomBoxShadow({
Color color = const Color(0xFF000000),
Offset offset = Offset.zero,
double blurRadius = 0.0,
this.blurStyle = BlurStyle.normal,
}) : super(color: color, offset: offset, blurRadius: blurRadius);
@override
Paint toPaint() {
final Paint result = Paint()
..color = color
..maskFilter = MaskFilter.blur(this.blurStyle, blurSigma);
assert(() {
if (debugDisableShadows)
result.maskFilter = null;
return true;
}());
return result;
}
}
Maintenant, nous pouvons l'utiliser comme ceci:
new CustomBoxShadow(
color: Colors.black,
offset: new Offset(5.0, 5.0),
blurRadius: 5.0,
blurStyle: BlurStyle.outer
)