基于Material组件实现,用于将单个组件卡片化。并使其具有投影效果,可加外边距,也可以自定义卡片形状。

相关组件

Material

Card可以让一个组件卡片化

【elevation】 : 影深 【double】
【margin】: 外边距 【double】
【color】: 颜色 【Color】
【child】: 孩子 【Widget】
image.png

  1. import 'package:flutter/material.dart';
  2. class CustomCard extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Card(
  6. color: Color(0xffB3FE65),
  7. elevation: 4,
  8. margin: EdgeInsets.all(10),
  9. child: Container(
  10. alignment: Alignment.topLeft,
  11. width: 200,
  12. height: 0.618*200,
  13. margin: EdgeInsets.all(10),
  14. child: Text("Card", style: TextStyle(fontSize: 20)),
  15. ),
  16. );
  17. }
  18. }

可以通过shape属性实现裁切效果

【shape】 : 形状 【ShapeBorder】
【margin】: 外边距 【double】
【color】: 颜色 【Color】
【child】: 孩子 【Widget】
image.png

import 'package:flutter/material.dart';
import '../../../../app/utils/pather.dart';
class ShapeCard extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Card(
      color: Color(0xffB3FE65),
      elevation: 6,
      shape: StarShapeBorder(),
      child: Container(
        alignment: Alignment.center,
        width: 100,
        height: 100,
        child: Text("Card", style: TextStyle(fontSize: 20)),
      ),
    );
  }
}

class StarShapeBorder extends ShapeBorder {
  @override
  EdgeInsetsGeometry get dimensions => null;

  @override
  Path getInnerPath(Rect rect, {TextDirection textDirection}) {
    return null;
  }

  @override
  Path getOuterPath(Rect rect, {TextDirection textDirection}) =>
      Pather.create.nStarPath(9, 50, 40, dx: 50, dy: 50);

  @override
  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {
  }

  @override
  ShapeBorder scale(double t) {
    return null;
  }
}