Files
fengshui_compass/lib/components/grid_clip_paint.dart
2022-07-20 17:33:21 +08:00

116 lines
2.9 KiB
Dart

import 'dart:async';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
// class GridClipPaint extends StatelessWidget {
// const GridClipPaint(
// this.left,
// this.top,
// this.right,
// this.bottom, {
// Key key,
// }) : super(key: key);
//
// // ui.Image image;
// final double left;
// final double top;
// final double right;
// final double bottom;
//
// @override
// Widget build(BuildContext context) {
// ui.Image image;
// return Container(
// color: Colors.transparent,
// alignment: Alignment.center,
// child: CustomPaint(
// // 使用CustomPaint 背景画板
// painter: ClipPainter(image),
// ),
// );
// }
// }
class GridClipPaint extends StatefulWidget {
const GridClipPaint(this.image, this.left, this.top, this.right, this.bottom,
{Key key})
: super(key: key);
final ui.Image image;
final double left;
final double top;
final double right;
final double bottom;
@override
State<GridClipPaint> createState() => _GridClipPaintState();
}
class _GridClipPaintState extends State<GridClipPaint> {
ui.Image image;
@override
void initState() async {
// TODO: implement initState
// final appDataDirectory = await getApplicationDocumentsDirectory();
// File file = File(join(appDataDirectory.path, 'rotate_image'));
super.initState();
}
Future<ui.Image> imageLoader() {
ImageStream imageStream = const AssetImage("assets/images/arrow.png")
.resolve(ImageConfiguration(size: Size(700, 700)));
Completer<ui.Image> imageCompleter = Completer<ui.Image>();
void imageListener(ImageInfo info, bool synchronousCall) {
ui.Image image = info.image;
imageCompleter.complete(image);
imageStream.removeListener(ImageStreamListener(imageListener));
}
imageStream.addListener(ImageStreamListener(imageListener));
return imageCompleter.future;
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.transparent,
alignment: Alignment.center,
child: CustomPaint(
// 使用CustomPaint 背景画板
painter: ClipPainter(image),
),
);
}
}
class ClipPainter extends CustomPainter {
final ui.Image image;
final double left;
final double top;
final double right;
final double bottom;
ClipPainter(this.image,
{this.left = 0.3, this.top = 0.3, this.right = 0.6, this.bottom = 0.6});
@override
void paint(Canvas canvas, Size size) {
// TODO: implement paint
Paint paint = Paint();
canvas.drawImageRect(
image,
Rect.fromLTRB(image.width * left, image.height * top,
image.width * right, image.height * bottom),
Rect.fromLTWH(0, 0, size.width, size.height),
paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
// TODO: implement shouldRepaint
return false;
}
}