Flutter 颤振-如何更改容器小部件的旋转点?
我使用Flutter 颤振-如何更改容器小部件的旋转点?,flutter,Flutter,我使用Container小部件的transform属性来绕Z轴旋转它, 就这样, transform: Matrix4.rotationZ(10 * pi/180) 在以下代码段中: Scaffold( resizeToAvoidBottomInset: false, body: Stack( children: <Widget>[ Container( // margin: EdgeInsets.symmetric(vertic
Container
小部件的transform
属性来绕Z轴旋转它,
就这样,
transform: Matrix4.rotationZ(10 * pi/180)
在以下代码段中:
Scaffold(
resizeToAvoidBottomInset: false,
body: Stack(
children: <Widget>[
Container(
// margin: EdgeInsets.symmetric(vertical: 20.0,horizontal: 10.0),
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
"assets/img/women.png",
),
fit: BoxFit.scaleDown,
),
),
),
SingleChildScrollView(
child: Container(
width: deviceSize.width,
height: deviceSize.height,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Flexible(
child: Container(
margin: EdgeInsets.only(bottom: 90.0),
padding:
EdgeInsets.symmetric(vertical: 10.0, horizontal: 15),
transform: Matrix4.rotationZ(10 * pi / 180)
..translate(10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: Colors.orange,
boxShadow: [
BoxShadow(
blurRadius: 20.0,
color: Colors.orange,
offset: Offset(5, 7),
)
],
),
child: Text(
'Shopping Universe',
style: TextStyle(
color: Colors.white,
fontSize: 60.0,
fontFamily: 'Piedra',
fontWeight: FontWeight.w200,
),
),
),
),
Flexible(
child: AuthCard(),
),
],
),
),
),
],
),
);
脚手架(
resizeToAvoidBottomInset:false,
主体:堆栈(
儿童:[
容器(
//边缘:边缘组。对称(垂直:20.0,水平:10.0),
装饰:盒子装饰(
图像:装饰图像(
图片:资产评估(
“assets/img/women.png”,
),
适合度:BoxFit.scaleDown,
),
),
),
SingleChildScrollView(
子:容器(
宽度:deviceSize.width,
高度:deviceSize.height,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
子:容器(
边距:仅限边缘组(底部:90.0),
衬垫:
边缘组。对称(垂直:10.0,水平:15),
变换:矩阵4.旋转Z(10*pi/180)
…翻译(10.0),
装饰:盒子装饰(
边界半径:边界半径。圆形(25),
颜色:颜色。橙色,
boxShadow:[
箱形阴影(
半径:20.0,
颜色:颜色。橙色,
偏移量:偏移量(5,7),
)
],
),
子:文本(
“购物世界”,
样式:TextStyle(
颜色:颜色,白色,
字体大小:60.0,
fontFamily:“Piedra”,
fontWeight:fontWeight.w200,
),
),
),
),
灵活的(
子级:AuthCard(),
),
],
),
),
),
],
),
);
如何更改旋转点并将其设置为容器的重心
我可以使用translate重新定位它,类似于Matrix4.rotationZ(15*pi/180)…translate(10.0)
但我不喜欢那种方法
有人能帮我吗
如有任何建议或建议,将不胜感激。谢谢。您可以使用Transform
小部件包装容器
,并将origin
属性设置为您想要的任何属性
如果希望原点
位于容器的中心
,则必须执行类似原点:偏移(containerWidth/2,containerHeight/2)
的操作
由于您的容器
没有特定的高度(只有宽度与其父容器相同),因此您必须找到它的大小。您可以使用RenderBox
。你可以找到一个关于如何做到这一点的教程
import 'package:flutter/material.dart';
import 'auth_card.dart';
import 'dart:math' as Math;
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
GlobalKey _containerKey = GlobalKey();
Size _containerSize = Size(0, 0);
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback(_afterLayout);
super.initState();
}
Size _getSize() {
final RenderBox renderBoxRed =
_containerKey.currentContext.findRenderObject();
return renderBoxRed.size;
}
_afterLayout(_) {
_containerSize = _getSize();
setState(() {});
}
@override
Widget build(BuildContext context) {
Size deviceSize = MediaQuery.of(context).size;
return Scaffold(
resizeToAvoidBottomInset: false,
body: Stack(
children: <Widget>[
Container(
// margin: EdgeInsets.symmetric(vertical: 20.0,horizontal: 10.0),
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
"assets/img/women.png",
),
fit: BoxFit.scaleDown,
),
),
),
SingleChildScrollView(
child: Container(
width: deviceSize.width,
height: deviceSize.height,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Flexible(
child: Transform(
transform: Matrix4.rotationZ(10 * Math.pi / 180),
origin: Offset(
_containerSize.width / 2, _containerSize.height / 2),
child: Container(
key: _containerKey,
margin: EdgeInsets.only(bottom: 20.0),
padding: EdgeInsets.symmetric(
vertical: 20.0, horizontal: 15),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: Colors.orange,
boxShadow: [
BoxShadow(
blurRadius: 20.0,
color: Colors.orange,
offset: Offset(5, 7),
)
],
),
child: Text(
'Shopping Universe',
style: TextStyle(
color: Colors.white,
fontSize: 60.0,
fontFamily: 'Piedra',
fontWeight: FontWeight.w200,
),
),
),
),
),
Flexible(
child: AuthCard()
),
],
),
),
),
],
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“auth_card.dart”;
导入'dart:math'作为数学;
类测试扩展了StatefulWidget{
@凌驾
_TestState createState();
}
类_TestState扩展状态{
GlobalKey _containerKey=GlobalKey();
大小_containerSize=大小(0,0);
@凌驾
void initState(){
WidgetsBinding.instance.addPostFrameCallback(_afterLayout);
super.initState();
}
大小_getSize(){
最终渲染器渲染器红色=
_containerKey.currentContext.FindEnderObject();
返回renderBoxRed.size;
}
_后布局{
_containerSize=_getSize();
setState((){});
}
@凌驾
小部件构建(构建上下文){
Size deviceSize=MediaQuery.of(context).Size;
返回脚手架(
resizeToAvoidBottomInset:false,
主体:堆栈(
儿童:[
容器(
//边缘:边缘组。对称(垂直:20.0,水平:10.0),
装饰:盒子装饰(
图像:装饰图像(
图片:资产评估(
“assets/img/women.png”,
),
适合度:BoxFit.scaleDown,
),
),
),
SingleChildScrollView(
子:容器(
宽度:deviceSize.width,
高度:deviceSize.height,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
孩子:变换(
变换:矩阵4.旋转Z(10*Math.pi/180),
原点:偏移量(
_containerSize.width/2,_containerSize.height/2),
子:容器(
密钥:_containerKey,
边距:仅限边缘组(底部:20.0),
填充:EdgeInsets.symmetric(
垂直:20.0,水平:15),
装饰:盒子装饰(
边界半径:边界半径。圆形(25),
颜色:颜色。橙色,
boxShadow:[
箱形阴影(
半径:20.0,
颜色:颜色。橙色,
偏移量:偏移量(5,7),
)
],
),
子:文本(
“购物世界”,
样式:TextStyle(
颜色:颜色,白色,
字体大小:60.0,
fontFamily:“Piedra”,
fontWeight:FontWe