Draggable и DragTarget. Как перетащить виджет и перестроить его внутри DragTarget? - PullRequest
1 голос
/ 23 октября 2019

Я новичок в трепетании и до сих пор не понимаю, как работает пользовательский интерфейс.

Вот мой код:

import 'package:flutter/material.dart';

class DragDemoView extends StatefulWidget
{
  DragDemoView(Key key) : super(key: key);

  @override
  DragDemoViewState createState() => new DragDemoViewState();
}

class DragDemoViewState extends State<DragDemoView>
{

  Icon icon1;
  Icon icon2;
  Icon icon4;
  Icon icon3;

  @override
  void initState() {
    icon1 = new Icon(Icons.wifi, color: Colors.white,);
    icon2 = new Icon(Icons.map, color: Colors.white,);
    icon3 = new Icon(Icons.access_alarm, color: Colors.white,);
    icon4 = new Icon(Icons.account_balance, color: Colors.white,);
    super.initState();
  }

  bool accepted = false;


  @override
  Widget build(BuildContext context) {
    return Center(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              Draggable(
                child: icon1,
                feedback: icon1,
                childWhenDragging: icon1,
                data: icon1,
              ),
              Draggable(
                child: icon2,
                feedback: icon2,
                childWhenDragging: icon2,
                data: icon2,
              ),
              Draggable(
                child: icon3,
                feedback: icon3,
                childWhenDragging: icon3,
                data: icon3,
              ),
              Draggable(
                child: icon4,
                feedback: icon4,
                childWhenDragging: icon4,
                data: icon4,
              ),
            ],
          ),
          Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              Container(
                width: 100.0,
                height: 100.0,
                decoration: BoxDecoration(
                  border: Border.all(),
                  color: Colors.deepOrangeAccent
                ),
                child: DragTarget<Icon>(builder: (context, List<Icon> candidateData, rejectedData) {
                  return accepted ? candidateData.first : new Icon(Icons.error, color: Colors.white,);
                },

                  onWillAccept: (data) {
                    return true;
                  },

                  onAccept: (data) {
                    setState(() {
                      accepted = true;
                    });
                  },

                ),
              ),
            ],
          ),
        ],
      )
    );
  }

  @override
  void dispose() {
    super.dispose();
  }

Как видите, япытаюсь переместить значок как Draggable в DragTarget и перестроить его там, используя данные, которые я предоставляю с Draggable. Но результат, который я получаю, - это сообщение об ошибке: «Плохое состояние: нет элемента».

Более общая картина здесь такова: сетка или какая-то компоновка на экране, где пользователь может генерировать разныевиджеты (например, изображение), перетаскивая их из списка в нужное место. Как бы я об этом? Предоставьте каждому Draggable ключ, а затем создайте нужный виджет внутри DragTarget, посмотрев соответствующий виджет на ключ? Или я совершенно не прав?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...