这里有一个更专业的方式来表达你的问题:
问题:
我正在开发一个 Flutter 项目,旨在复制下图所示的设计:
如何在 Flutter 中实现类似的布局和设计?以下是我迄今为止尝试过的代码:
我尝试过的代码:
import 'package:flutter/material.dart';
class OnboardingScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
ClipPath(
clipper: InverseWaveClipper(),
child: Container(
color: Colors.green,
height: MediaQuery.of(context).size.height *
0.5,
width: double.infinity,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"أهلاً",
style: TextStyle(
color: Colors.white,
fontSize: 30,
fontWeight: FontWeight.bold,
),
),
Text(
"مرحباً بك في فيت بوكس",
style: TextStyle(
color: Colors.white,
fontSize: 20,
),
),
],
),
),
),
),
Expanded(
child: Container(
color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"قبل أن نبدأ الرحله،",
style: TextStyle(
color: Colors.black,
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
Text(
"دعونا نتحدث",
style: TextStyle(
color: Colors.black,
fontSize: 20,
),
),
SizedBox(height: 20),
TextField(
decoration: InputDecoration(
hintText: "أدخل اسمك",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {},
child: Text("التالي"),
),
],
),
),
),
),
],
),
);
}
}
class InverseWaveClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
var path = Path();
path.lineTo(0, size.height - 60);
var controlPoint1 = Offset(size.width / 4, size.height - 100);
var endPoint1 = Offset(size.width / 2, size.height - 60);
path.quadraticBezierTo(
controlPoint1.dx, controlPoint1.dy, endPoint1.dx, endPoint1.dy);
var controlPoint2 = Offset(size.width * 3 / 4, size.height - 20);
var endPoint2 = Offset(size.width, size.height - 60);
path.quadraticBezierTo(
controlPoint2.dx, controlPoint2.dy, endPoint2.dx, endPoint2.dy);
path.lineTo(size.width, 0);
path.close();
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return false;
}
}
任何指导或建议将不胜感激!
取一个绿色背景的容器 然后添加列和另外 2 个容器 使第一个容器的半径仅在右下角 并使第二个容器的半径仅位于左上角。 这会起作用。