Обратитесь по ссылке @Nikita Kraev. Это работает с дротиком в 2018.5.2, в то время как Коллин Джексон не отвечает.

у создать область подписи какВот с дротиком в мобильном приложении!

Я пытался использоватьCustomPaint класс ... Но это не работает.

Может кто-нибудь помочь мне?

 user00000111 окт. 2017 г., 21:35
Может ли удалить избиратель объяснить свой голос? Ответ, размещенный здесь, кажется довольно полезным ....
 Robert Columbia11 окт. 2017 г., 14:03
Ваша программане работает?
 Cerbrus11 окт. 2017 г., 10:28
Мы не одобряем сообщения, в которых просто говорится о проблеме вне контекста, и ожидаем, что сообщество решит ее. Предполагая, что вы пытались решить это самостоятельно и застряли, может быть полезно, если вы написали свои мысли и то, что вы не могли понять. ДобавитьМинимальный, полный и проверяемый пример вашего кода и опишите, какие у вас проблемы.«Но это не работает» не очень полезно
 Cody Gray♦12 окт. 2017 г., 11:20
Мета-эффект@ user000001. Я согласен, что удаление совершенно необоснованно, учитывая качественный ответ. Если он все равно будет удален, пожалуйста, отметьте его.

Ответы на вопрос(1)

Решение Вопроса

GestureDetector записывать касания иCustomPaint рисовать на экране. Вот несколько советов:

использованиеRenderBox.globalToLocal преобразоватьDragUpdateDetails предоставленоGestureDetector.onPanUpdate в относительные координатыИспользоватьGestureDetector.onPanEnd обработчик жестов для записи разрывов между штрихами.Мутируя то же самоеList не будет автоматически вызывать перерисовку, потому чтоCustomPainter аргументы конструктора одинаковы. Вы можете запустить перекрашивание, создав новыйList каждый раз, когда предоставляется новая точка.использованиеCanvas.drawLine нарисовать округлую линию между каждой из записанных точек подписи.

import 'package:flutter/material.dart';

class SignaturePainter extends CustomPainter {
  SignaturePainter(this.points);

  final List<Offset> points;

  void paint(Canvas canvas, Size size) {
    Paint paint = new Paint()
      ..color = Colors.black
      ..strokeCap = StrokeCap.round
      ..strokeWidth = 5.0;
    for (int i = 0; i < points.length - 1; i++) {
      if (points[i] != null && points[i + 1] != null)
        canvas.drawLine(points[i], points[i + 1], paint);
    }
  }

  bool shouldRepaint(SignaturePainter other) => other.points != points;
}

class Signature extends StatefulWidget {
  SignatureState createState() => new SignatureState();
}

class SignatureState extends State<Signature> {
  List<Offset> _points = <Offset>[];

  Widget build(BuildContext context) {
    return new Stack(
      children: [
        GestureDetector(
          onPanUpdate: (DragUpdateDetails details) {
            RenderBox referenceBox = context.findRenderObject();
            Offset localPosition =
                referenceBox.globalToLocal(details.globalPosition);

            setState(() {
              _points = new List.from(_points)..add(localPosition);
            });
          },
          onPanEnd: (DragEndDetails details) => _points.add(null),
        ),
        CustomPaint(painter: SignaturePainter(_points), size: Size.infinite),
      ],
    );
  }
}

class DemoApp extends StatelessWidget {
  Widget build(BuildContext context) => new Scaffold(body: new Signature());
}

void main() => runApp(new MaterialApp(home: new DemoApp()));
 Nikita Kraev14 мар. 2018 г., 19:26
@ xrd Я немного изменил структуру, пожалуйста, проверьте суть здесь:gist.github.com/kitttn/408aa1264b82ae8ce1c0098a270e4f52
 user98332715 апр. 2018 г., 21:05
@NikitaKraev спасибо. Как я могу сделать это более производительным? Если я продолжаю рисовать, я теряю 60 кадров в секунду, впадаю в 5 кадров в секунду и становлюсь очень медленным. Есть ли способ сделать его более производительным. Я создаю больше как приложение для рисования. Спасибо.
 xrd10 мар. 2018 г., 07:58
Этот код, похоже, больше не работает с бета-каналом флаттера. Я пробовал на эмуляторе и на реальном устройстве (Pixel 2), но на экране ничего не рисует.
 xingjiu02 мая 2018 г., 04:21
Обратитесь по ссылке @Nikita Kraev. Это работает с дротиком в 2018.5.2, в то время как Коллин Джексон не отвечает.
 Nikita Kraev14 мар. 2018 г., 19:27
@xrd, обратите внимание, вы должны включить поддержку Dart 2 в вашей IDE / анализаторе. Или просто добавьте вручнуюnew в детях вызовы конструктора.

Ваш ответ на вопрос