-10
モバイルアプリケーションでダーツを使用してHereのような署名領域を作成したいと考えています。ダーツ(フラッター)でモバイルアプリの「署名エリア」を作成
私はCustomPaintクラスを使用しようとしました...しかし、動作しません。
誰でも手伝ってもらえますか?
モバイルアプリケーションでダーツを使用してHereのような署名領域を作成したいと考えています。ダーツ(フラッター)でモバイルアプリの「署名エリア」を作成
私はCustomPaintクラスを使用しようとしました...しかし、動作しません。
誰でも手伝ってもらえますか?
GestureDetector
をタッチして記録し、CustomPaint
を使用して署名領域を作成することができます。ここではいくつかのヒントがあります:
RenderBox.globalToLocal
はストローク間の休憩を記録するためにGestureDetector.onPanEnd
ジェスチャーハンドラを使用して相対座標GestureDetector.onPanUpdate
によって提供さDragUpdateDetails
変換すること。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 GestureDetector(
onPanUpdate: (DragUpdateDetails details) {
setState(() {
RenderBox referenceBox = context.findRenderObject();
Offset localPosition =
referenceBox.globalToLocal(details.globalPosition);
_points = new List.from(_points)..add(localPosition);
});
},
onPanEnd: (DragEndDetails details) => _points.add(null),
child: new CustomPaint(painter: new SignaturePainter(_points)),
);
}
}
class DemoApp extends StatelessWidget {
Widget build(BuildContext context) => new Scaffold(body: new Signature());
}
void main() => runApp(new MaterialApp(home: new DemoApp()));
このコードは、フラッターのベータチャネルではもう動作しません。エミュレータと実際のデバイス(Pixel 2)で試しましたが、画面上に何も描画されません。 – xrd
私たちは、単にコンテキストのうち、問題を述べる記事を阻止し、コミュニティがそれを解決することを期待。あなた自身でそれを解決しようとしたと仮定した場合、あなたがあなたの考えを書いて、あなたが理解できなかったものが役立つかもしれません。あなたのコードの[mcve]を追加し、あなたが持っている問題を記述してください。 _しかし、それはうまくいきません。_はあまり役に立ちません。 – Cerbrus
あなたのプログラムは動作しません(http://importblogkit.com/2015/07/does-not-work/)? –
削除有権者は投票を説明できますか?ここに掲示された答えはかなり役に立ちました。 – user000001