Flutter 中的自定义形状
Custom Shape in Flutter
我正在尝试绘制一个像这样的形状,其中包含一些文本和数据。
我为此使用 CustomPaint
CustomPaint(
painter: new RightBox(context),
child: container()
),
Container container() {
return Container(
height: 200,
width: 200,
color: Colors.black,
margin: EdgeInsets.only(left: 20),
child: Center(child: Text("Hi Khushal",
style: TextStyle(
color: Colors.white
),
),)
);
}
class RightBox extends CustomPainter {
RightBox(this.context);
BuildContext context;
@override
void paint(Canvas canvas, Size size) {
size = MediaQuery.of(context).size;
Paint paint = Paint()
..color = Colors.black;
Path path = Path()
..moveTo(size.width * 0.02 + size.width * 0.5, size.height * 0.85)
..lineTo(size.width * 0.05 + size.width * 0.5, size.height * 0.70)
..lineTo(size.width * 0.45 + size.width * 0.5, size.height * 0.67)
..lineTo(size.width * 0.48 + size.width * 0.5, size.height * 0.85);
path.close();
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(RightBox oldDelegate) {
return true;
}
}
我希望在右下角的 CustomPaint Widget 中显示文本,
我将一个子 Container 传递给 CustomPaint,但相反,我得到了一个单独放置在堆栈中的小部件。
我知道我做错了什么,请帮我实现 UI.
您的 painter
占据了整个屏幕。因此,您需要 align
container
将其放入 painter 中。这是一种方法。有几种方法可以做到。
您将 container
和 painter
放在 stack
小部件中。 Align
container
根据你的需要。请确保提供一些 padding
和 margin
以获得更准确的结果。
Stack(
children: <Widget>[
Align(
alignment: Alignment.bottomRight,
child: Container(
height: 200,
width: 200,
alignment: Alignment.bottomRight,
child: Center(
child: Text(
"Hi Khushal",
style: TextStyle(color: Colors.black),
),
)),
),
CustomPaint(
painter: RightBox(context),
),
],
),
我正在尝试绘制一个像这样的形状,其中包含一些文本和数据。
我为此使用 CustomPaint
CustomPaint(
painter: new RightBox(context),
child: container()
),
Container container() {
return Container(
height: 200,
width: 200,
color: Colors.black,
margin: EdgeInsets.only(left: 20),
child: Center(child: Text("Hi Khushal",
style: TextStyle(
color: Colors.white
),
),)
);
}
class RightBox extends CustomPainter {
RightBox(this.context);
BuildContext context;
@override
void paint(Canvas canvas, Size size) {
size = MediaQuery.of(context).size;
Paint paint = Paint()
..color = Colors.black;
Path path = Path()
..moveTo(size.width * 0.02 + size.width * 0.5, size.height * 0.85)
..lineTo(size.width * 0.05 + size.width * 0.5, size.height * 0.70)
..lineTo(size.width * 0.45 + size.width * 0.5, size.height * 0.67)
..lineTo(size.width * 0.48 + size.width * 0.5, size.height * 0.85);
path.close();
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(RightBox oldDelegate) {
return true;
}
}
我希望在右下角的 CustomPaint Widget 中显示文本, 我将一个子 Container 传递给 CustomPaint,但相反,我得到了一个单独放置在堆栈中的小部件。 我知道我做错了什么,请帮我实现 UI.
您的 painter
占据了整个屏幕。因此,您需要 align
container
将其放入 painter 中。这是一种方法。有几种方法可以做到。
您将 container
和 painter
放在 stack
小部件中。 Align
container
根据你的需要。请确保提供一些 padding
和 margin
以获得更准确的结果。
Stack(
children: <Widget>[
Align(
alignment: Alignment.bottomRight,
child: Container(
height: 200,
width: 200,
alignment: Alignment.bottomRight,
child: Center(
child: Text(
"Hi Khushal",
style: TextStyle(color: Colors.black),
),
)),
),
CustomPaint(
painter: RightBox(context),
),
],
),