То, что я пытаюсь сделать, - это одним нажатием кнопки увеличивать размер нескольких виджетов. Код ниже и пояснение под ним:
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, первая проблема, которую я обнаружил, заключается в том, что значение изменения соотношения не сохранялось, что даже после нажатия + или - соотношение, используемое для создания нового виджета / увеличения увеличения соотношения при двойном нажмите. Вторая проблема - это основной вопрос, связанный с увеличением нескольких объектов, но ничего не происходит, даже когда я нажимаю + -. Не стесняйтесь спрашивать, отсутствует ли какая-либо информация!