Lang_Wang127 2021-08-23 14:24 采纳率: 100%
浏览 44
已结题

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是个好东西,一定是个趋势,加油!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    问题事件

    • 系统已结题 9月2日
    • 已采纳回答 8月25日
    • 创建了问题 8月23日

    悬赏问题

    • ¥20 springboot博客系统
    • ¥15 关于#c++#的问题:在A和B类中应该怎么定义复制构造函数来避开unordered_set复制构造的问题(相关搜索:头文件)
    • ¥15 MICE包多重插补后数据集汇总导出
    • ¥15 一道算法分析问题(关于3-MSAT)
    • ¥15 C++ FLUENT 化学反应速率 编写困难
    • ¥15 Python嵌套交叉验证
    • ¥15 linuxkit+elasticsearch
    • ¥15 兄得萌6.13do题😭😭大一小东西的work
    • ¥15 投不到原始数据,gdal投影代码
    • ¥20 卷积混响的代码帮写。。