Lang_Wang127
2021-08-23 14:24
采纳率: 100%
浏览 22

Flutter官方教程学习,有些代码报错是怎么回事?

  • 收藏

1条回答 默认 最新

  • 不担心 2021-08-24 19:02
    已采纳

    应该是你看的教程没有及时更新的原因,flutter前几个月有个比较大的更新(2.12.xx以上),就是要求空安全.
    你看的教程还没有做对应的修改.
    把鼠标移到key上可以看到错误提示,应该是说这里的key不能为null,但是你的key参数是在{}里的,在dart的语法中{}中的参数表示为可选参数,既然是可选的那就有可能为null,所以报错!
    有两个修改办法,就是在{}中的参数如果要声明为必须的,可以加上required关键字,像这样
    MyFadeTest({required Key key,this.title}):super(key: key);
    另一种就是把key放在{}的外面,这样也是表示必传的参数
    MyFadeTest(Key key,{this.title}):super(key: key);

    至于title的错误也是类似的,title在{}中表示可选的,是有可能为null的,但是你声明参数的时候他是不为空的
    final String title;
    所以你只要声明为可选参数就行了
    final String? title;

    第二个问题
    看findRenderObject()方法的定义
    RenderObject? findRenderObject();
    他返回的是一个可选的RenderObject
    但是你定义了一个RenderBox去接收他,所以提示类型不匹配的错误
    虽然RenderBox是RenderObject的子类,但是你要转换成相同类型的才可以,dart不会帮你乱转换的.
    这个函数返回的对象是可选的,所以你接收的对象最好也是可选的,因为有可能返回null.
    可以这样改
    RenderBox? rb = context.findRenderObject() as RenderBox?;

    flutter是个好东西,一定是个趋势,加油!!

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题