#flutter
#flutter
Вопрос:
Я новичок в Flutter и Dart, и я работаю над созданием пользовательской панели навигации. Что я хотел бы знать, так это как я могу использовать flutter для преобразования прямоугольника в такую форму?
Любая помощь или руководства по пользовательским виджетам, нарисованным на заказ, очень ценятся!
Ответ №1:
ClipPath
может быть решением для вас, и вы можете создавать пользовательские клипперы, подобные этому :
class MyClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path myPath = Path();
myPath.lineTo(0.0, size.height);
myPath.quadraticBezierTo(
size.width / 4,
size.height / 1.2,
size.width / 2,
size.height / 1.2
);
myPath.quadraticBezierTo(
size.width - (size.width / 4),
size.height / 1.2,
size.width,
size.height);
myPath.lineTo(size.width, 0.0);
return myPath;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return false;
}
}
Я опубликовал весь свой код ниже, вы можете поиграть с ним и преобразовать в то, что вам нужно :
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
child: Center(
child: ClipPath(
clipper: MyClipper(),
child: Container(
height: 200,
width: 300,
color: Colors.black26,
),
)),
),
),
);
}
}
class MyClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path myPath = Path();
myPath.lineTo(0.0, size.height);
myPath.quadraticBezierTo(
size.width / 4,
size.height / 1.2,
size.width / 2,
size.height / 1.2
);
myPath.quadraticBezierTo(
size.width - (size.width / 4),
size.height / 1.2,
size.width,
size.height);
myPath.lineTo(size.width, 0.0);
return myPath;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return false;
}
}
Комментарии:
1. Мне удалось получить в свои руки несколько руководств после того, как я опубликовал этот вопрос. Я видел контур клипа, но я не уверен, как я могу создать верхнюю кривую.
2. Мне удалось его создать. Это было похоже на приведенный вами пример, но с еще одним квадратичным коэффициентом.
3. Привет @AndreiCaisim Caisim, можешь рассказать, пожалуйста, как тебе удалось сделать верхний
curve
.