Flutter 2进阶(五):json_serializable使用

后面请求网络用的是免费的 Bmob ,这里面生成实体类推荐用 json_serializable 。

进阶失败了。

添加依赖:

environment:
  sdk: ">=2.15.0-116.0.dev <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2

  json_annotation: ^4.4.0 #添加1
dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^1.0.0

  build_runner: ^2.1.5 #添加2
  json_serializable: ^6.1.0 #添加3

创建文件 home_page_bean.dart ,写入参数和构造方法,第二个包要手写,格式就是加个 .g :

part 'home_page_bean.g.dart';

有报错别先管:

import 'package:json_serializable/json_serializable.dart';

part 'home_page_bean.g.dart';

@JsonSerializable()
class HomePage {
  int? type; //分类,如推荐等
  String? title; //标题
  String? content; //内容
  String? playnum; //播放数量
  String? classname; //分类,如影视,追番等
  String? videoLength; //视频时长
  String? comments; //评论
  String? up; //博主
  String? videourl; //视频播放链接

  //构造方法
  HomePage();

}

手动添加 fromjson 方法和 tojson 方法,手写会报错不用管:

import 'package:json_annotation/json_annotation.dart';

part 'home_page_bean.g.dart';

@JsonSerializable()
class HomePage {
  int? type; //分类,如推荐等
  String? title; //标题
  String? content; //内容
  String? playnum; //播放数量
  String? classname; //分类,如影视,追番等
  String? videoLength; //视频时长
  String? comments; //评论
  String? up; //博主
  String? videourl; //视频播放链接

  //构造方法
  HomePage();

  factory HomePage.fromJson(Map<String, dynamic> json) =>
      _$HomePageFromJson(json);

  Map<String, dynamic> toJson() => _$HomePageToJson(this);
}

然后执行命令:

 flutter packages pub run build_runner build

等待就可以编译出来文件:home_page_bean.g.dart

但大多时候在实际项目编译都是有问题的,我搞了一天也没通过。不得不说 flutter 兼容性有够差劲。最后我新建了项目,安装了插件,在里面生成完复制到我的项目中去。

我用的非空版本 flutter ,大概遇到的问题:

编译进入死循环,重复打印:

我完美地将 flutter 与 build runner 一起使用,但今天它只是收到了这个空错误。甚至以为我恢复了我的代码更改,但仍然是同样的错误。

错误 :

>[SEVERE] json_serializable:json_serializable on test/widget_test.dart:

>NoSuchMethodError: The getter 'uri' was called on null.
>Receiver: null
>Tried calling: uri
>[INFO] 3.3s elapsed, 1/17 actions completed.
>[INFO] 4.4s elapsed, 1/17 actions completed.
>[INFO] 5.4s elapsed, 1/17 actions completed.
>[INFO] 6.4s elapsed, 1/17 actions completed.
>[INFO] 7.5s elapsed, 1/17 actions completed.
>[INFO] 8.5s elapsed, 1/17 actions completed.
>[INFO] 9.6s elapsed, 1/17 actions completed.
>[INFO] 10.7s elapsed, 1/17 actions completed.
>[INFO] 11.8s elapsed, 1/17 actions completed.
>[INFO] 12.9s elapsed, 1/17 actions completed.
>[INFO] 14.0s elapsed, 1/17 actions completed.
>[INFO] 15.0s elapsed, 1/17 actions completed.
>[INFO] 16.1s elapsed, 1/17 actions completed.
>[INFO] 17.1s elapsed, 1/17 actions completed.
>[WARNING] No actions completed for 15.1s, waiting on:
>  json_serializable:json_serializable on lib/common_widgets/alert_screens.dart
>  json_serializable:json_serializable on lib/common_widgets/app_logo.dart
>  json_serializable:json_serializable on lib/common_widgets/app_tab_bar.dart
>  json_serializable:json_serializable on lib/common_widgets/buttons_widgets.dart
>  json_serializable:json_serializable on lib/common_widgets/cards.dart
>  .. and 11 more
>  [INFO] 18.2s elapsed, 1/17 actions completed.
>  [INFO] 19.3s elapsed, 1/17 actions completed.

解决方法是更新插件:

android studio - flutter build runner not working - The getter 'uri' was called on null - Stack Overflow

更新了插件,和   data_plugin: ^0.0.16 冲突,说这里面用的一个插件是老的,而 json_serializable 用的是新的,我又只能把版本降回去。

中间还有各种报错问题,搜索发现让更新插件,十分无语:

/D:/rruanjian/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.7.0/lib/src/file.dart:437:1: Error: This requires the 'extension-methods' experiment to be enabled.

Try enabling this experiment by adding it to the command line when compiling and running.

extension FileSpanExtension on FileSpan {
^^^^^^^^^

/D:/rruanjian/flutter/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.7.0/lib/src/file.dart:437:32: Error: A function declaration needs an explicit list of parameters.

Try adding a parameter list to the function declaration.

extension FileSpanExtension on FileSpan {

...
                               ^^^^^^^^

类似这样的。这些问题一直循环,我解决了一天都没解决。

有人遇到上面这样循环的问题,麻烦帮我解决一下吧,我的配置是这样的,暂时去掉了json_serializable:

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  http: ^0.12.0+1
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2

  data_plugin: ^0.0.16
  json_annotation: ^2.0.0
  fluttertoast: ^8.0.6
  permission_handler: ^5.0.1+1
  shared_preferences: ^0.5.7+3
  underline_indicator: ^0.0.2


dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^1.0.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值