You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

341 lines
10 KiB

import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:recook/constants/app_image_resources.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/widgets/share_page/share_image_tool.dart';
class PostTimeBannerInfo {
String timeInfo;
PostTimeBannerInfo({this.timeInfo = ""});
init() async {
leftBannerImage =
await ShareImageTool.getImageWithAsset("assets/post_left_banner.png");
rightBannerImage =
await ShareImageTool.getImageWithAsset("assets/post_right_banner.png");
}
ui.Image leftBannerImage;
ui.Image rightBannerImage;
double bannerHeight = 45;
double rightBannerWidth = 100;
paint(Canvas canvas, Size size) {
canvas.save();
Offset leftOffSet = Offset(15, size.height - 130);
Offset rightOffSet = Offset(
ScreenUtil().screenWidth - 80 - rightBannerWidth + 15,
size.height - 130);
Paint paint = new Paint();
// 结束时间
if (!TextUtils.isEmpty(timeInfo)) {
// 右边灰色
canvas.drawImageRect(
rightBannerImage,
Offset(0.0, 0.0) &
Size(rightBannerImage.width.toDouble(),
rightBannerImage.height.toDouble()),
rightOffSet & Size(rightBannerWidth, 45),
paint);
ui.ParagraphBuilder endTimeParagraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.center,
fontSize: 10.0,
textDirection: TextDirection.ltr,
maxLines: 2,
),
)
..pushStyle(
ui.TextStyle(
color: Colors.white, textBaseline: ui.TextBaseline.alphabetic),
)
..addText("$timeInfo");
ui.Paragraph endTimeParagraph = endTimeParagraphBuilder.build()
..layout(ui.ParagraphConstraints(
width: rightBannerWidth,
));
canvas.drawParagraph(
endTimeParagraph, Offset(rightOffSet.dx + 5, leftOffSet.dy + 9.5));
// 左边红色
canvas.drawImageRect(
leftBannerImage,
Offset(0.0, 0.0) &
Size(leftBannerImage.width.toDouble(),
leftBannerImage.height.toDouble()),
leftOffSet &
Size(ScreenUtil().screenWidth - 80 - rightBannerWidth + 15, 45),
paint);
// 红色文字
ui.ParagraphBuilder infoParagraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.left,
fontSize: 14 * 2.sp,
textDirection: TextDirection.ltr,
maxLines: 1,
),
)
..pushStyle(
ui.TextStyle(
color: Colors.white, textBaseline: ui.TextBaseline.alphabetic),
)
..addText("全球精品 正品保障 售后无忧");
ui.Paragraph infoParagraph = infoParagraphBuilder.build()
..layout(ui.ParagraphConstraints(
width: ScreenUtil().screenWidth - 80 - rightBannerWidth + 15,
));
canvas.drawParagraph(
infoParagraph, Offset(leftOffSet.dx + 10, leftOffSet.dy + 12));
} else {
// 左边红色
canvas.drawImageRect(
leftBannerImage,
Offset(0.0, 0.0) &
Size(leftBannerImage.width.toDouble(),
leftBannerImage.height.toDouble()),
leftOffSet & Size(ScreenUtil().screenWidth - 80 + 3, 45),
paint);
// 红色文字
ui.ParagraphBuilder infoParagraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.center,
fontSize: 14 * 2.sp,
textDirection: TextDirection.ltr,
maxLines: 1,
),
)
..pushStyle(
ui.TextStyle(
color: Colors.white, textBaseline: ui.TextBaseline.alphabetic),
)
..addText("全球精品 | 正品保障 | 售后无忧");
ui.Paragraph infoParagraph = infoParagraphBuilder.build()
..layout(ui.ParagraphConstraints(
width: ScreenUtil().screenWidth - 80 + 3 - 20,
));
canvas.drawParagraph(
infoParagraph, Offset(leftOffSet.dx + 10, leftOffSet.dy + 12));
}
canvas.restore();
}
}
class PostBottomInfo {
String price;
String crossedPrice;
String info;
String qrCode;
PostBottomInfo({
this.price = "",
this.crossedPrice = "",
this.info = "",
this.qrCode = "",
});
init() async {
image = await ShareImageTool.getImageWithQRCode(
qrCode: this.qrCode, size: qrSize.width);
}
Size qrSize = Size(300, 300);
ui.Image image;
paint(Canvas canvas, Size size) {
canvas.save();
// 价格
double textLeft = 15;
ui.ParagraphBuilder paragraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.left,
fontSize: 18.0,
textDirection: TextDirection.ltr,
maxLines: 1,
),
)
..pushStyle(
ui.TextStyle(
fontSize: 12,
color: Color(0xffff0000),
textBaseline: ui.TextBaseline.alphabetic),
)
..addText("¥")
..pushStyle(
ui.TextStyle(
color: Color(0xffff0000),
fontSize: 18,
textBaseline: ui.TextBaseline.alphabetic),
)
..addText(price + " ")
..pushStyle(
ui.TextStyle(
fontSize: 10,
color: Color(0xff999999),
textBaseline: ui.TextBaseline.alphabetic),
)
..addText("¥")
..pushStyle(
ui.TextStyle(
fontSize: 14,
decoration: TextDecoration.lineThrough,
color: Color(0xff999999),
textBaseline: ui.TextBaseline.alphabetic),
)
..addText(crossedPrice);
ui.Paragraph paragraph = paragraphBuilder.build()
..layout(ui.ParagraphConstraints(width: ScreenUtil().screenWidth - 140));
canvas.drawParagraph(paragraph, Offset(textLeft, size.height - 75));
// canvas.restore();
// 商品信息
ui.ParagraphBuilder infoParagraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.left,
fontSize: 14.0,
textDirection: TextDirection.ltr,
maxLines: 2,
),
)
..pushStyle(
ui.TextStyle(
color: Color(0xff333333), textBaseline: ui.TextBaseline.alphabetic),
)
..addText(info);
ui.Paragraph infoParagraph = infoParagraphBuilder.build()
..layout(ui.ParagraphConstraints(width: ScreenUtil().screenWidth - 150));
canvas.drawParagraph(infoParagraph, Offset(textLeft, size.height - 50));
//
// 二维码
Offset qrOffset =
Offset(ScreenUtil().screenWidth - 90 - 25, size.height - 75);
ui.ParagraphBuilder qrTextParagraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.center,
fontSize: 8,
textDirection: TextDirection.ltr,
maxLines: 1,
),
)
..pushStyle(
ui.TextStyle(
fontSize: 8,
color: Color(0xff333333),
textBaseline: ui.TextBaseline.alphabetic),
)
..addText("长按二维码立购");
ui.Paragraph qrTextParagraph = qrTextParagraphBuilder.build()
..layout(ui.ParagraphConstraints(width: 70));
canvas.drawParagraph(
qrTextParagraph, Offset(qrOffset.dx - 10, size.height - 20));
Rect qrCodeWrap = qrOffset & Size(50, 50);
Paint paint = new Paint();
canvas.drawImageRect(image, Offset(0.0, 0.0) & qrSize, qrCodeWrap, paint);
canvas.restore();
}
}
class PostUserImage {
String name;
PostUserImage({this.name = "瑞库客"});
init() async {
image =
await ShareImageTool.getImageWithAsset(AppImageName.recook_icon_120);
}
String title = "让消费服务生活,让生活充满精致";
ui.Image image;
Offset offset = Offset(15, 10);
Size size = Size(50, 50);
// 绘图函数
paint(Canvas canvas) async {
canvas.save();
// 头像
Rect screenWrap = offset & size;
Paint screenWrapPainter = new Paint();
screenWrapPainter.color = Colors.white;
screenWrapPainter.style = PaintingStyle.fill;
canvas.drawRect(screenWrap, screenWrapPainter);
// canvas.scale(0.4, 0.4);
// 名字
var textLeft = offset.dx * 2 + size.width;
ui.ParagraphBuilder paragraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.left,
fontSize: 14.0,
textDirection: TextDirection.ltr,
maxLines: 1,
),
)
..pushStyle(
ui.TextStyle(
color: Colors.black, textBaseline: ui.TextBaseline.alphabetic),
)
..addText(name);
ui.Paragraph paragraph = paragraphBuilder.build()
..layout(ui.ParagraphConstraints(width: ScreenUtil().screenWidth - 140));
canvas.drawParagraph(paragraph, Offset(textLeft, 16));
// title
ui.ParagraphBuilder titleParagraphBuilder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textAlign: TextAlign.left,
fontSize: 10.0,
textDirection: TextDirection.ltr,
maxLines: 1,
),
)
..pushStyle(
ui.TextStyle(
color: Color(0xff666666), textBaseline: ui.TextBaseline.alphabetic),
)
..addText(title);
ui.Paragraph titleParagraph = titleParagraphBuilder.build()
..layout(ui.ParagraphConstraints(width: ScreenUtil().screenWidth - 140));
canvas.drawParagraph(titleParagraph, Offset(textLeft, 41));
//
Paint paint = new Paint();
canvas.clipRRect(
RRect.fromRectXY(
Rect.fromLTWH(offset.dx, offset.dy, size.width, size.height),
10,
10),
doAntiAlias: false);
canvas.drawImageRect(
image,
Offset(0.0, 0.0) &
Size(image.width.toDouble(), image.height.toDouble()),
screenWrap,
paint);
canvas.restore();
}
}
class PostBackground {
String url;
Size imageSize;
PostBackground({this.url, this.imageSize});
init() async {
image = await ShareImageTool.getImageWithNetwork(url);
}
ui.Image image;
// 绘图函数
paint(Canvas canvas) async {
canvas.save();
Rect screenWrap = Offset(15, 70) & Size(imageSize.width, imageSize.height);
Paint screenWrapPainter = new Paint();
screenWrapPainter.color = Colors.white;
screenWrapPainter.style = PaintingStyle.fill;
canvas.drawRect(screenWrap, screenWrapPainter);
Paint paint = new Paint();
canvas.drawImageRect(
image,
Offset(0.0, 0.0) &
Size(image.width.toDouble(), image.height.toDouble()),
Offset(15, 70) & Size(imageSize.width, imageSize.height),
paint);
canvas.restore();
}
}