Мне действительно нужна ваша помощь.
Я почти уверен, что использование CustomPaint
будет здесь решением. но я не могу найти исходный код видео Flutter CustomPaint
.
Я также знаю, что для этого я должен использовать drawPath
. но я не могу найти никаких ресурсов о том, как преобразовать мой SVG в путь .
мой сценарий таков:
У меня есть image
, и у меня также есть мой SVG
, завернутый в Draggable
, поэтому я могу разместить его в любом месте изображения.
Я пробовал использовать RepaintBoundaries
, но он не включает SVG
, даже если Я пытаюсь разместить его как родительский виджет.
Буду признателен за любую помощь.
РЕДАКТИРОВАТЬ:
Я специально конвертирую PDF-файл в изображения.
Stack(
children: <Widget>[
Positioned(
child: Text(
imageList.length == 0
? "$currentPage / --"
: "$currentPage / ${imageList.length}",
style: TextStyle(color: Colors.white),
),
top: 10,
right: 10,
),
FutureBuilder(
future: getDocument,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: FadingText(
'Rendering File ...',
style: TextStyle(color: Colors.black, fontSize: 20),
),
);
}
return CarouselSlider.builder(
itemCount: snapshot.data.length,
options: CarouselOptions(
viewportFraction: 1,
autoPlay: false,
aspectRatio: 0.5,
enableInfiniteScroll: false,
onPageChanged: (index, reason) {
setState(() {
currentPage = index + 1;
print(currentPage);
});
}),
itemBuilder: (context, index) {
return Container(
child: Image.memory(snapshot.data[index]),
);
},
);
}),
Positioned(
top: position.dy,
left: position.dx,
child: Center(
child: Container(
padding: EdgeInsets.all(10),
child: Draggable(
child: Container(
width: 120,
height: 70,
child: Center(
child: SvgPicture.asset("assets/signature.svg"),
),
),
childWhenDragging: Container(
width: 120,
height: 70,
child: Center(
child: Opacity(
opacity: 0.2,
child: SvgPicture.asset("assets/signature.svg"),
),
),
),
feedback: Container(
child: Center(
child: SvgPicture.asset("assets/signature.svg"),
),
width: 120,
height: 70,
),
onDraggableCanceled:
(Velocity velocity, Offset offset) {
setState(() => position = offset);
print(
"X Position : ${position.dx} | Y Position : ${position.dy}");
//_capturePng();
showDialog(
barrierDismissible: true,
context: context,
builder: (_) => ViewDocumentDialog(
x: double.parse((position.dx).toStringAsFixed(2)),
y: double.parse((position.dy).toStringAsFixed(2)),
images: encodeImageList,
page: currentPage,
),
);
},
),
),
),
)
],
)),