So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable


Part_Time_Nerd

Ich versuche, ein einfaches Kinderspiel zu erstellen, bei dem der Benutzer auf ein Bild klicken und es auf ein DragTarget ziehen kann. Die Bilder enthalten schließlich dynamischen Text aus einer Liste, aber sie enthalten derzeit nur eine Zahl, um dies zu simulieren. Wenn ich derzeit auf dem Bild auswähle, bewegt sich nur der Text. Das Bild selbst bleibt stehen. Was ich schließlich möchte, ist, dass das Bild vom Bildschirm verschwindet, sobald es an das DragTarget geliefert wird. Ich habe einige Variationen des folgenden Codes ausprobiert, aber nichts hat funktioniert. Ich gehe davon aus, dass ich eine Form von GestureDetector verwenden muss, aber es ist mir nicht gelungen, einen erfolgreich zu implementieren (mein Code zeigt diese Versuche nicht an). Jede Hilfe oder Beratung wird sehr geschätzt!

 @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new Stack(
      children: <Widget>[
        new Container(
          decoration: new BoxDecoration(
            image: new DecorationImage(
              image: new AssetImage("assets/images/landscape_with_tree.png"),
              fit: BoxFit.cover,
            ),
          ),
        ),
        DragBox(Offset(250.0, 50.0), '1'),
        DragBox(Offset(350.0, 50.0), '2'),
        DragBox(Offset(200.0, 100.0), '3'),
        Positioned(
          right: 50.0,
          bottom: 0.0,
          child: DragTarget(
//            onAccept: () {
//            },
            builder: (
              BuildContext context,
              List<dynamic> accepted,
              List<dynamic> rejected,
            ) {
              return Container(
                width: 100.0,
                height: 100.0,
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image: AssetImage("assets/images/basket.png"),
                  ),
                ),
                child: Center(
                  child: Text(
                    'Drag Here!',
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),

  }

Ziehbare Klasse

class _DragBoxState extends State<DragBox> {
  Offset position = Offset(0.0, 0.0);

  @override
  Widget build(BuildContext context) {
    return Positioned(
      left: position.dx,
      top: position.dy,
      child: Draggable(
        child: Container(
          width: 50.0,
          height: 50.0,
          decoration: BoxDecoration(
            image: DecorationImage(
              image: AssetImage("assets/images/apple.png"),
            ),
          ),
          child: Center(
            child: Text(
              widget.label,
              style: TextStyle(
                color: Colors.white,
                decoration: TextDecoration.none,
                fontSize: 20.0,
              ),
            ),
          ),
        ),
        onDraggableCanceled: (velocity, offset) {
          setState(() {
            position = widget.initPos;
          });
        },
        feedback: Container(
          width: 60.0,
          height: 60.0,
          child: Center(
            child: Text(
              widget.label,
              style: TextStyle(
                color: Colors.white,
                decoration: TextDecoration.none,
                fontSize: 18.0,
              ),
Part_Time_Nerd

Ich bin mir nicht sicher, ob dies der effizienteste oder beste Weg ist, aber ich habe die folgende Lösung zum Laufen gebracht. Bitte lassen Sie es mich wissen, wenn Sie einen besseren Weg haben!

class _DragBoxState extends State<DragBox> {
  Offset position = Offset(0.0, 0.0);
  AssetImage apple;
  AssetImage _imageToShow = new AssetImage('assets/images/apple.png');

  @override
  void initState() {
    super.initState();
    position = widget.initPos;
  }

  @override
  Widget build(BuildContext context) {
    return Positioned(
      left: position.dx,
      top: position.dy,
      child: Draggable<AssetImage>(
        data: apple,
        child: Container(
          width: 50.0,
          height: 50.0,
          decoration: BoxDecoration(
            image: DecorationImage(
              image: _imageToShow,
            ),
          ),
          child: Center(
            child: Text(
              widget.label,
              style: TextStyle(
                color: Colors.black,
                decoration: TextDecoration.none,
                fontSize: 18.0,
              ),
            ),
          ),
        ),
        onDraggableCanceled: (velocity, offset) {
          setState(() {
            position = widget.initPos;
          });
        },
        onDragStarted: () {
          setState(() {
            print('drag started');
            _imageToShow = new AssetImage('assets/images/answered_apple.png');
            return _imageToShow;
          });
        },
        feedback: Container(
          width: 60.0,
          height: 60.0,
          decoration: BoxDecoration(
            image: DecorationImage(
              image: _imageToShow,
            ),
          ),
          child: Center(
            child: Text(
              widget.label,
              style: TextStyle(
                color: Colors.black,
                decoration: TextDecoration.none,
                fontSize: 16.0,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Verwandte Artikel


So verspotten Sie ein Bild mit einem Gerät in Cypress

Briancaffey Ich verwende Cypress, um meine VueJS-Anwendung zu testen. Ich habe nur Probleme damit, ein Bild zu verspotten, das auf der Seite angezeigt werden soll. Für meinen Anwendungsfall lade ich einfach ein Benutzerprofil mit dem folgenden Code: describe('

So überlagern Sie ein div-Element mit einem Bild

Stahl Ich habe ein Element, das im Grunde ein rechteckiger Rand ist, der einige andere Elemente enthält, die hauptsächlich aus Text bestehen. Ich muss wissen, wie man ein Bild über dieses rechteckige Randelement legt, wenn man mit der Maus über das Element fäh

So erhalten Sie mit tweepy ein Bild aus einem Tweet

Xodarap Wenn ich mir diesen Tweet ansehe , kann ich sehen, dass die Bilder eindeutig angehängt sind. Dennoch bekomme ich folgendes: >>> status = api.get_status(1275955989322162177, include_entities = True) >>> status.entities {'hashtags': [], 'symbols': [], 'u

So decken Sie ein Bild mit einem Symbol ab

Gefälschter Fisch Hier ist ein Beispiel: https://jsbin.com/rekaxa/edit?html,css,output . Ich möchte diesen roten Kreis (ein Symbol) über das Bild setzen, aber HTML einfach halten. Was ist der beste (vielleicht völlig andere) Weg, um es zu implementieren? Pauli

So verschieben Sie ein Bild mit HTML und JS

Maulwurf Ich versuche, ein Bild innerhalb eines festgelegten Radius von 100 Pixeln zu verschieben. Ich habe einige Probleme, es zum Laufen zu bringen. Ich verwende setInterval, um es wiederholt zu bewegen, und zufällig, um festzulegen, wo es sich bewegt. Volls