【发布时间】:2019-12-20 15:08:28
【问题描述】:
Here 解决了有关设计此布局的问题。
我在使用它时遇到了问题,因为屏幕右侧的这条曲线不是小部件,当我想在绿色一侧有一些其他小部件时,我不能,因为设计的曲线不是小部件,它是从绿色中剪裁的布局。
假设我想在屏幕右侧有这条曲线,在下方有一些小部件。
源代码
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(home: Scaffold(body: Test())));
}
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
double _height = 0.0;
double _width = 0.0;
double _rightPadding = 2.0;
double _btnSize = 25.0;
double _btnY = 0.0;
@override
Widget build(BuildContext context) {
if (_height == 0.0)
setState(() {
_height = MediaQuery.of(context).size.height;
_width = MediaQuery.of(context).size.width;
_btnY = _height / 3 * 2;
});
return _height == 0.0
? Container()
: Stack(
children: <Widget>[
Container(
color: Colors.white,
),
CustomPaint(
size: Size(_width - _rightPadding, _height),
painter: CurvedPainter(_btnSize, _btnY),
),
],
);
}
}
class CurvedPainter extends CustomPainter {
CurvedPainter(this.btnSize, this.btnY);
final double btnSize;
final double btnY;
@override
void paint(Canvas canvas, Size size) {
Path path = Path();
path.moveTo(0.0, 0.0);
path.lineTo(size.width, 0.0);
path.lineTo(size.width, btnY - btnSize * 2);
path.cubicTo(size.width, btnY - btnSize * 0.3, size.width - btnSize * 0.95, btnY - btnSize * 0.9, size.width - btnSize, btnY);
path.cubicTo(size.width - btnSize * 0.95, btnY + btnSize * 0.9, size.width, btnY + btnSize * 0.3, size.width, btnY + btnSize * 2);
path.lineTo(size.width, size.height);
path.lineTo(0.0, size.height);
path.lineTo(0.0, 0.0);
canvas.drawPath(
path,
Paint()
..color = Colors.transparent
..style = PaintingStyle.fill);
}
@override
bool shouldRepaint(CurvedPainter oldDelegate) => oldDelegate.btnY != btnY;
}
我想在所有小部件之上使用右曲线作为小部件,没有绿色边,你假设绿色边为ListView。
【问题讨论】:
-
简单实现
_getPath方法,类似这样:pastebin.com/raw/Q8KvmvkF -
@Andrey Turkovsky 你能帮我解决这个问题吗?
-
@pskink 在那个绿色应该是透明的,我只想有右半圈。就像这个设计女巫是widget.stackoverflow.com/a/56988726/1830228在这个设计和你的实现导致容器的剪辑部分,但我想要widget.screen shots6.uplod.ir/i/00958/ysbszbx5dy6d.png
-
@pskink 你能用这张图得到它吗?这可以理解吗? s6.uplod.ir/i/00958/pezhjuaio39m.png
-
@pskink 我的意思是设计曲线在
listview之下,它不是listview的顶部。我想在所有小部件和布局之上有一个简单的单个小部件,例如可自定义的小部件container
标签: flutter flutter-layout flutter-canvas