You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 09:15:08