Как нарисовать SVG на изображении? - PullRequest
0 голосов
/ 20 июня 2020

Мне действительно нужна ваша помощь.

Я почти уверен, что использование 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,
                            ),
                          );
                        },
                      ),
                    ),
                  ),
                )
              ],
            )),
...