Flutter报错:无法在字段初始化器中访问this读取location属性
Flutter 访问fetchAll()返回列表报错修复方案
问题根因
报错触发直接原因是LocationMain类的字段初始化逻辑不符合Dart语法规则,同时代码里存在一处多余的错误导入:
- 字段初始化阶段Dart不允许访问未构造完成的实例(即不能在初始化器里用
this读取其他实例字段),原代码中final location = location.first既存在变量名笔误(右侧本应是locations而非location),也违反了初始化顺序规则 - 代码顶部导入了
dart:html库,该库仅用于Web端开发,在普通Flutter App项目中会引发额外编译错误
修复步骤
- 删除
location_details.dart文件顶部的import 'dart:html';语句 - 调整
LocationMain类的字段初始化逻辑,二选一即可:
方案1:直接获取首个location对象(不需要保留全量列表时用)
直接在字段初始化时从fetchAll()返回结果取第一个元素,避免引用实例字段:
class LocationMain extends StatelessWidget { // 直接调用fetchAll取第一个元素,不依赖其他实例字段 final Location location = Location.fetchAll().first; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(location.name), titleTextStyle: AppBarTextStyle, ), body: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ ImageBanner(location.imagePath), TextSection("Title 1", "a;dfka;fjakdjf"), TextSection("Title 2", "This is Lorem Ipsum, but Indian version. Tussi kya dekhna chahte ho? :)"), ], )); } }
方案2:在build方法中取首个元素(需要保留全量locations列表时用)
把取单个location的逻辑放到build方法里,此时实例已经完成初始化,可以正常访问实例字段:
class LocationMain extends StatelessWidget { final List<Location> locations = Location.fetchAll(); @override Widget build(BuildContext context) { // build执行时实例已初始化完成,可正常访问locations final location = locations.first; return Scaffold( appBar: AppBar( title: Text(location.name), titleTextStyle: AppBarTextStyle, ), body: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ ImageBanner(location.imagePath), TextSection("Title 1", "a;dfka;fjakdjf"), TextSection("Title 2", "This is Lorem Ipsum, but Indian version. Tussi kya dekhna chahte ho? :)"), ], )); } }
原报错说明
lib/screens/location_details/location_details.dart:38:20: Error: Can't access 'this' in a field initializer to read 'location'. final location = location.first; ^^^^^^^^
该报错明确提示:字段初始化器中无法访问
this读取location属性,本质就是初始化阶段对象未构造完成,不允许访问实例成员。
内容的提问来源于stack exchange,提问作者NABEEL MIRZA
相关产品推荐
相关产品推荐

