如何解决'findAncestorStateOfType' 方法在 null 上被调用接收者:null 尝试调用:findAncestorStateOfType<NavigatorState>() 错误
谁能帮我解决这个问题?我正在关注有关动画径向菜单的网站编码教程。但是本教程没有展示如何通过按下 FloatingActionButton 导航到其他页面。于是,我自己试了一下,却出现了这个错误。
这是我的代码
class RadialAnimation extends StatelessWidget {
final AnimationController controller;
RadialAnimation({Key key,this.controller})
: scale = Tween<double>(
begin: 1.5,end: 0.0,).animate(
CurvedAnimation(parent: controller,curve: Curves.fastOutSlowIn),),translation = Tween<double>(
begin: 0.0,end: 100.0,).animate(
CurvedAnimation(
parent: controller,curve: Curves.elasticOut,rotation = Tween<double>(
begin: 0.0,end: 360.0,curve: Interval(
0.0,0.7,super(key: key);
// final AnimationController controller;
final Animation<double> scale;
final Animation<double> translation;
final Animation<double> rotation;
build(context) {
return AnimatedBuilder(
animation: controller,builder: (context,builder) {
return Transform.rotate(
angle: radians(rotation.value),child: Stack(
alignment: Alignment.center,children: [
_buildButton1(45,color: Colors.red,icon: FontAwesomeIcons.thumbtack),_buildButton2(180,icon: FontAwesomeIcons.fire),_buildButton3(315,icon: FontAwesomeIcons.bolt),Transform.scale(
scale: scale.value - 1,child: FloatingActionButton(
child: Icon(FontAwesomeIcons.timesCircle),onPressed: _close,Transform.scale(
scale: scale.value,onPressed: _open,],);
});
}
这是我尝试修改代码的地方。
_buildButton1(double angle,{Color color,IconData icon}) {
final double rad = radians(angle);
return Transform(
transform: Matrix4.identity()
..translate(
(translation.value) * cos(rad),(translation.value) * sin(rad),child: FloatingActionButton(
child: Icon(icon),backgroundColor: color,onPressed: () {
BuildContext context;
Navigator.push(
context,MaterialPageRoute(builder: (context) => BT()),);
},));
}
解决方法
每次构建新按钮时,传递一个 context
。无论您走到哪里,始终保持 context
的安全。
// Add a context as a parameter. Keep it safe.
_buildButton1(BuildContext context,double angle,{Color color,IconData icon}) {
return Transform(
# ...
child: FloatingActionButton(
child: Icon(icon),backgroundColor: color,onPressed: () {
// No,that's wrong. Comment it,or even delete it FOREVER
// BuildContext context;
Navigator.push(context,MaterialPageRoute(builder: (context) => BT()));
},),);
}
当您调用 _buildButton1
时,只需传递上下文。保持安全。
build(context) {
return AnimatedBuilder(
animation: controller,builder: (context,builder) {
// Here's your context. Use it. Keep it safe.
return Transform.rotate(
angle: radians(rotation.value),child: Stack(
alignment: Alignment.center,children: [
// Use it. Keep it safe.
_buildButton1(context,45,color: Colors.red,icon: FontAwesomeIcons.thumbtack),_buildButton2(context,180,icon: FontAwesomeIcons.fire),_buildButton3(context,315,icon: FontAwesomeIcons.bolt),Transform.scale(
scale: scale.value - 1,child: FloatingActionButton(
child: Icon(FontAwesomeIcons.timesCircle),onPressed: _close,Transform.scale(
scale: scale.value,onPressed: _open,],);
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。