feat: 整体常用控件封装,常用工具类。首页数据对接
This commit is contained in:
1 parent
d90d023e85
commit
fbcd33ea2b
50 files changed
+4558
-264
No files matched your search
@@ -0,0 +1,218 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:skywood/main/lib_file.dart';
|
||||
|
||||
class PixelPageBackground extends StatelessWidget {
|
||||
const PixelPageBackground({super.key, required this.child});
|
||||
|
||||
final Widget child;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Stack(
|
||||
children: [
|
||||
const Positioned.fill(child: ColoredBox(color: Colors.white)),
|
||||
const Positioned.fill(child: CustomPaint(painter: _GridPainter())),
|
||||
Positioned(
|
||||
left: -18.w,
|
||||
top: 178.h,
|
||||
child: Container(
|
||||
width: 52.w,
|
||||
height: 132.h,
|
||||
color: const Color(0xFF08F214),
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
right: -20.w,
|
||||
top: 282.h,
|
||||
child: Container(
|
||||
width: 58.w,
|
||||
height: 286.h,
|
||||
color: const Color(0xFF08F214),
|
||||
),
|
||||
),
|
||||
child,
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PixelPanel extends StatelessWidget {
|
||||
const PixelPanel({
|
||||
super.key,
|
||||
required this.child,
|
||||
this.padding,
|
||||
this.color = Colors.white,
|
||||
this.borderColor = const Color(0xFF1C1E1F),
|
||||
this.shadowColor = const Color(0xFF653CFA),
|
||||
});
|
||||
|
||||
final Widget child;
|
||||
final EdgeInsets? padding;
|
||||
final Color color;
|
||||
final Color borderColor;
|
||||
final Color shadowColor;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: color,
|
||||
border: Border.all(color: borderColor, width: 1.5.w),
|
||||
boxShadow: [
|
||||
BoxShadow(color: shadowColor, offset: Offset(4.w, 4.h)),
|
||||
BoxShadow(color: shadowColor, offset: Offset(-4.w, 4.h)),
|
||||
],
|
||||
),
|
||||
padding: padding ?? EdgeInsets.all(10.w),
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PixelSectionLabel extends StatelessWidget {
|
||||
const PixelSectionLabel({
|
||||
super.key,
|
||||
required this.label,
|
||||
this.width,
|
||||
this.trailing,
|
||||
});
|
||||
|
||||
final String label;
|
||||
final double? width;
|
||||
final Widget? trailing;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: 20.h,
|
||||
width: width?.w,
|
||||
padding: EdgeInsets.symmetric(horizontal: 8.w),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFF7B54F6),
|
||||
border: Border.all(color: const Color(0xFF1C1E1F), width: 1.w),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Container(width: 7.w, height: 7.w, color: const Color(0xFF34F04F)),
|
||||
SizedBox(width: 5.w),
|
||||
Expanded(
|
||||
child: Text(
|
||||
label,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 12.sp,
|
||||
fontWeight: FontWeight.w700,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
trailing ?? const SizedBox.shrink(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PixelButton extends StatelessWidget {
|
||||
const PixelButton({
|
||||
super.key,
|
||||
required this.label,
|
||||
this.onTap,
|
||||
this.width = 116,
|
||||
this.height = 28,
|
||||
this.color = const Color(0xFF8D62F7),
|
||||
});
|
||||
|
||||
final String label;
|
||||
final VoidCallback? onTap;
|
||||
final double width;
|
||||
final double height;
|
||||
final Color color;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
width: width.w,
|
||||
height: height.h,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
color: color,
|
||||
border: Border.all(color: const Color(0xFF1C1E1F), width: 1.w),
|
||||
),
|
||||
child: Text(
|
||||
label,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 12.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
height: 1,
|
||||
shadows: const [
|
||||
Shadow(color: Color(0xFF1C1E1F), offset: Offset(1, 1)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PosterImage extends StatelessWidget {
|
||||
const PosterImage({
|
||||
super.key,
|
||||
this.width,
|
||||
this.height,
|
||||
this.borderRadius = 3,
|
||||
this.showBorder = true,
|
||||
});
|
||||
|
||||
final double? width;
|
||||
final double? height;
|
||||
final double borderRadius;
|
||||
final bool showBorder;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: width?.w,
|
||||
height: height?.h,
|
||||
decoration: BoxDecoration(
|
||||
border: showBorder
|
||||
? Border.all(color: const Color(0xFF1C1E1F), width: 0.8.w)
|
||||
: null,
|
||||
borderRadius: BorderRadius.circular(borderRadius.r),
|
||||
),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
child: HelpImg.asset(ConstImg.homeCardBg, fit: BoxFit.cover),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _GridPainter extends CustomPainter {
|
||||
const _GridPainter();
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final gridPaint = Paint()
|
||||
..color = const Color(0xFFE0D8FF)
|
||||
..strokeWidth = 0.8;
|
||||
const step = 10.0;
|
||||
for (double x = 0; x <= size.width; x += step) {
|
||||
canvas.drawLine(Offset(x, 0), Offset(x, size.height), gridPaint);
|
||||
}
|
||||
for (double y = 0; y <= size.height; y += step) {
|
||||
canvas.drawLine(Offset(0, y), Offset(size.width, y), gridPaint);
|
||||
}
|
||||
|
||||
final blockPaint = Paint()..color = const Color(0xFFE0D8FF);
|
||||
canvas.drawRect(Rect.fromLTWH(80, 0, 34, 96), blockPaint);
|
||||
canvas.drawRect(Rect.fromLTWH(228, 0, 34, 32), blockPaint);
|
||||
canvas.drawRect(Rect.fromLTWH(278, 112, 34, 34), blockPaint);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
|
||||
}
|
||||
Reference in new issue
Block a user