Dart代码编译报错:Expected a declaration, but got '}' 求协助
排查Dart报错:
Error: Expected a declaration but got '}' 报错核心触发原因
这个报错的本质是类作用域被多余的大括号提前截断:
- 原代码中,类构造函数写完后,额外多敲了一个闭合大括号,直接把
WorldTime类的定义提前关闭了。 - 原本应该作为类内部方法的
getTime(),被扔到了类的作用域外面。编译器扫描到这个多余的}时,判定类已经定义完成,后续代码不符合Dart顶级代码的语法要求,直接抛出「期望声明语句却遇到了'}'」的错误。
修复结构错误后需要同步调整的功能问题
删掉多余的大括号、把getTime()方法放回类的作用域内之后,还有两处写法规避会导致功能不符合预期,需要一起修正:
- 方法开头的
var url;是无意义的局部空变量,和类传入的url属性重名,会覆盖原本的请求端点值,导致API路径拼接失败,需要删掉这个局部变量,直接引用类的url成员。 - 方法末尾的
var time = now.toString();是方法内部的局部临时变量,根本不会赋值给类定义的time属性,会导致类的time字段始终为null,需要删掉var关键字,直接给类成员赋值。
修正后的完整可运行代码
import 'package:http/http.dart'; import 'dart:convert'; class WorldTime { String location; // 用于UI展示的位置名称 String? time; // 对应地区的时间 String flag; // 指向资产国旗图标的URL String url; // 用于API请求的地区端点URL WorldTime({ required this.location, required this.flag, required this.url }); Future<void> getTime() async { // 直接使用类成员的url拼接请求,删除冗余的局部空url变量 var response = await get(Uri.https('worldtimeapi.org', 'api/timezone/$url')); Map data = jsonDecode(response.body); // 从接口返回数据中提取属性 String datetime = data['datetime']; String offset = data['utc_offset'].substring(1,3); print(datetime); print(offset); // 构造本地时区的DateTime对象 DateTime now = DateTime.parse(datetime); now = now.add(Duration(hours: int.parse(offset))); // 直接给类成员time赋值,不声明同名局部变量 time = now.toString(); } }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

