以下代码为Flutter官方教程截图(地址: 给 Android 开发者的 Flutter 指南 - Flutter 中文文档 - Flutter 中文资源 学习如何把 Android 开发的经验应用到 Flutter 应用的开发中。 https://flutter.cn/docs/get-started/flutter-for/android-devs#views%EF%BC%89%EF%BC%9A
以下为我照着写的代码:
看了半天也不知道哪里出了问题?求指教。
以下代码为Flutter官方教程截图(地址: 给 Android 开发者的 Flutter 指南 - Flutter 中文文档 - Flutter 中文资源 学习如何把 Android 开发的经验应用到 Flutter 应用的开发中。 https://flutter.cn/docs/get-started/flutter-for/android-devs#views%EF%BC%89%EF%BC%9A
以下为我照着写的代码:
看了半天也不知道哪里出了问题?求指教。
应该是你看的教程没有及时更新的原因,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是个好东西,一定是个趋势,加油!!