我需要一些帮助,我试图使代码在flutter移动背景图像与animatedpositioning,但我发现以下错误:
没有为类型"TerceiraRota"定义方法"setState"。(文档)尝试将名称更正为现有方法的名称,或者定义一个名为'setState'的方法。
有人能帮帮我吗?谢谢!
class TerceiraRota extends StatelessWidget {
double position=0;
bool isFlipped=false;
bool isStart=false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Sad Shrek Adventures"),
),
body: Stack(
children: [
AnimatedPositioned(
top: -100,
left: position,
height: 660,
child: Image.asset('imagens/swamp.jpg'),
duration: Duration(microseconds: 200)),
Positioned(
top:470,
left: 180,
child: Container(
height: 120.0,
width: 120.0,
decoration: BoxDecoration(
image:DecorationImage(
image:AssetImage(
"imagens/shrektriste2.png"
),
)
),
),
),
Positioned(
top:400,
left:MediaQuery.of(context).size.width/2-85,
child: IconButton(
icon:Icon(Icons.arrow_back_ios),
onPressed: () {
setState(() {
position -= 40;
});
})
),],
),
);
}
} ```
您需要使用StatefulWidget
,在上面的代码中您扩展了StatelessWidget
。由于StatelessWidget
不能保持或修改小部件的状态,因此没有setState
功能,因此名称为无状态。
看一下文档,你可以在那里找到很好的例子。
您创建了一个StatelessWidget。StatelessWidget没有状态,所以…Setstate不工作
如果你想使用状态,把你的小部件改成一个有状态的小部件。
Android Studio和VsCode使这个更改很容易。将鼠标置于无状态文字中,点击黄色灯内,选择"转换为有状态小部件"。
您需要像这样使用StatefulWidget
而不是StatelessWidget
:
class TerceiraRota extends StatefulWidget {
const TerceiraRota({Key? key}) : super(key: key);
@override
State<TerceiraRota> createState() => _TerceiraRotaState();
}
class _TerceiraRotaState extends State<TerceiraRota> {
double position = 0;
bool isFlipped = false;
bool isStart = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Sad Shrek Adventures"),
),
body: Stack(
children: [
AnimatedPositioned(
top: -100,
left: position,
height: 660,
child: Image.asset('imagens/swamp.jpg'),
duration: const Duration(microseconds: 200),
),
Positioned(
top: 470,
left: 180,
child: Container(
height: 120.0,
width: 120.0,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("imagens/shrektriste2.png"),
)),
),
),
Positioned(
top: 400,
left: MediaQuery.of(context).size.width / 2 - 85,
child: IconButton(
icon: const Icon(Icons.arrow_back_ios),
onPressed: () {
setState(() {
position -= 40;
});
},
),
),
],
),
);
}
}