颤振错误 - 未为类型定义方法"setState"



我需要一些帮助,我试图使代码在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;
});
},
),
),
],
),
);
}
}

最新更新