Как увеличить размер нескольких виджетов одним нажатием кнопки - PullRequest
0 голосов
/ 05 августа 2020

То, что я пытаюсь сделать, - это одним нажатием кнопки увеличивать размер нескольких виджетов. Код ниже и пояснение под ним:

class MoveableStackItem extends StatefulWidget {
  final int _page;
  final double width1;
  final double height1;

  const MoveableStackItem(
      {Key key,
      @required int page,
      @required double width,
      @required double height})
      : _page = page,
        width1 = width,
        height1 = height,
        super(key: key);
  @override
  _MoveableStackItemState createState() =>
      _MoveableStackItemState(page: _page, height: height1, width: width1);
}

class _MoveableStackItemState extends State<MoveableStackItem> {
  int _page;
  double xPosition = 0;
  double yPosition = 0;
  String picDir;
  bool picState = false;

  double width1;
  double height1;
  double ratio = 2;
  Color _borderColor = Colors.black;
  BorderRadiusGeometry _borderRadius = BorderRadius.circular(0);
  bool tapState = false;

  @override
  _MoveableStackItemState(
      {@required int page, @required double width, @required double height})
      : _page = page,
        width1 = width,
        height1 = height;

  @override
  Widget build(BuildContext context) {
    switch (_page) {
      case 3:
      return Positioned(
          top: yPosition,
          left: xPosition,
          child: GestureDetector(
            onPanUpdate: (tapInfo) {
              setState(() {
                xPosition += tapInfo.delta.dx;
                yPosition += tapInfo.delta.dy;
              });
            },
            onTap: () {
              if (!tapState) {
                setState(() {
                  _borderRadius = BorderRadius.circular(10);
                  _borderColor = Colors.red;
                  tapState = !tapState;
                });
              } else {
                setState(() {
                  _borderRadius = BorderRadius.circular(0);
                  _borderColor = Colors.black;
                  tapState = !tapState;
                });
              }
            },
            onDoubleTap: () {
              setState(() {
                width1 *= ratio;
                height1 *= ratio;
              });
            },
            onLongPress: () {
              setState(() {
                width1 = 150;
                height1 = 200;
              });
            },
            child: DragTarget(
              builder: (context, candidateData, rejectedData) {
                if (picState) {
                  return AnimatedContainer(
                    width: width1 * ratio,
                    height: height1 *ratio ,
                    duration: Duration(seconds: 0),
                    curve: Curves.fastOutSlowIn,
                    decoration: BoxDecoration(
                      border: Border.all(width: 3, color: _borderColor),
                      color: Colors.white,
                      borderRadius: _borderRadius,
                    ),
                    child: Image(
                      image: AssetImage(picDir),
                    ),
                  );
                } else {
                  return AnimatedContainer(
                    width: width1 * ratio,
                    height: height1 * ratio,
                    duration: Duration(seconds: 0),
                    curve: Curves.fastOutSlowIn,
                    decoration: BoxDecoration(
                      border: Border.all(width: 3, color: _borderColor),
                      color: Colors.white,
                      borderRadius: _borderRadius,
                    ),
                    child: Placeholder(),
                  );
                }
              },

Итак, здесь, в разных случаях (показан только случай 3), на экране будут появляться разные виджеты, а у меня в случае 4 виджет со значком Появятся «+» и «-», которые изменят значение коэффициента, код ниже:

 case 4:
        return Positioned(
          right:0,
          top: 0,
          child: Row(
                    children: <Widget>[
                      IconButton(
                        icon: Icon(Icons.add),
                        onPressed: _handleZoomIn,
                      ),
                      IconButton(
                        icon: Icon(Icons.remove),
                        onPressed: _handleZoomOut,
                      ),
                    ],
                  )
        );
        break;
        
    }
  }
  void _handleZoomIn() {
    setState(() {
      ratio *= 1.5;
      print(ratio);
    });
  }

  void _handleZoomOut() {
    setState(() {
      ratio /= 1.5;
      print(ratio);
    });
  }

, но кажется, что независимо от значения коэффициента, которое я изменяю, это не повлияет на размер размер виджета, который создается в случае 3, первая проблема, которую я обнаружил, заключается в том, что значение изменения соотношения не сохранялось, что даже после нажатия + или - соотношение, используемое для создания нового виджета / увеличения увеличения соотношения при двойном нажмите. Вторая проблема - это основной вопрос, связанный с увеличением нескольких объектов, но ничего не происходит, даже когда я нажимаю + -. Не стесняйтесь спрашивать, отсутствует ли какая-либо информация!

...