Flutter应用List.generate逻辑及super(key: key)语法作用咨询
List.generate代码逻辑解析
final items = List<Listitem>.generate( 1000, (i) => i % 6 == 0 ? Headingitem('heading $i') : Messageitem('sender $i', 'message body $i'));
- 这是Dart内置的列表工厂构造方法
List.generate,用来快速批量生成指定长度的列表 - 第一个参数是列表的总长度,这里填的是1000,所以最终生成的items列表包含1000个元素,索引
i的取值范围是0到999 - 第二个参数是元素生成回调,会对每个索引
i执行一次逻辑生成对应的元素 - 这里用三目运算符做了类型判断:如果
i除以6的余数为0,就生成Headingitem类型的分组标题项,其余情况生成Messageitem类型的消息项。最终效果是每5条消息项间隔1条标题项,符合常见的分组列表的结构设计。
super(key: key)语法解析
const App({Key? key, required this.items}) : super(key: key);
- 这段是自定义Widget的构造函数写法,你自定义的
AppWidget肯定继承自StatelessWidget或者StatefulWidget父类 - Key是Flutter框架用来在Widget树更新时,唯一标识对应Widget的参数,在列表项动态增删、全局定位Widget等场景下,必须靠Key才能保证状态不会错位
- 构造函数中
Key? key是可选入参,允许你在创建AppWidget的时候传入自定义的Key - 冒号后面的部分是Dart的构造函数初始化列表,
super(key: key)的作用是把你传入的Key参数传递给父类Widget的构造函数,只有做了这一步,Flutter框架才能识别到你给当前AppWidget设置的Key,后续的Widget比对、状态关联逻辑才能正常运行。如果你省略了这一步,手动给App设置的Key会直接失效,需要Key的相关功能都会出问题。
内容的提问来源于stack exchange,提问作者serhani ahmed saned
相关产品推荐
相关产品推荐

