Один метод с 3 переменными - PullRequest
       6

Один метод с 3 переменными

0 голосов
/ 28 сентября 2019

Надеюсь, есть кто-то, кто может мне помочь.И я надеюсь, вы понимаете, о чем я, потому что мне очень сложно объяснить проблему.; -)

У меня есть

int высота

int ширина

int глубина

строка с minusButton - слайдер - plusButtonheightTextfield,

строка с minusButton - ползунок - plusButton для поля widthText,

строка с minusButton - ползунок - plusButton для поля глубины TextTech.

Весь кодвыписано, поэтому я повторяюсь очень часто!Единственная разница - это высота, ширина и глубина.Эти переменные отображаются в текстовом поле.

Ниже приведено то, что я сделал для кнопки минус, но она не работает.

  AnimatedOpacity minusButton(int heightWidthDepth) {
return AnimatedOpacity(
  opacity: heightWidthDepth == 1 ? 0.0 : 1.0,
  duration: Duration(milliseconds: 500),
  child: RawMaterialButton(
    elevation: 6.0,
    child: Icon(
      MdiIcons.minus,
      size: 15,
    ),
    onPressed: () {
      setState(() {
        heightWidthDepth > 1
            ? heightWidthDepth--
            : heightWidthDepth = heightWidthDepth;
        calculate();
      });
    },
    constraints: buttonSize,
    shape: CircleBorder(),
    fillColor: white,
  ),
);
}

//In each row I have instead of all the code:
minusButton(height),
minusButton(width),
minusButton(depth),

Я думал, что heightWidthDepth будет заменен входной переменной height и что переменная height получит значение из heightWidthDepth, но это не так.

У меня такое чувствочто есть очень простое решение, но я его не понимаю.

Ссылка на мое приложение

Picture of the screen of my app

1 Ответ

1 голос
/ 28 сентября 2019

Передайте Function в качестве параметра вместо integer.В вашем State классе, я думаю, у вас есть три переменные для использования в виджетах.Итак:

int height = ..;
int width = ..;
int depth = ..;

AnimatedOpacity minusButton(Function onPressed) {
    return AnimatedOpacity(
      opacity: height == 1 ? 0.0 : 1.0,
      duration: Duration(milliseconds: 500),
      child: RawMaterialButton(
        elevation: 6.0,
        child: Icon(
          Icons.remove,
          size: 15,
        ),
        onPressed: heightOnPressed,
        shape: CircleBorder(),
        fillColor: Colors.white,
      ),
    );
  }

  void heightOnPressed() {
    setState(() {
      height > 1
          ? height--
          : height = height;
    });
    print('$height');
  }

Вместо написания всех виджетов один за другим, вы просто создадите onPressed функцию для каждого из них, которая будет манипулировать связанными State переменными.

Пример:

Row(children: <Widget>[
minusButton(heightOnPressed),
minusButton(widthOnPressed), 
minusButton(depthOnPressed),
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...