2024年Flutter Json自动反序列化——json_serializable v1,flutter页面跳转数据
import 'package:json_annotation/json_annotation.dart';
import 'package:flutter/material.dart';
// 示例模型,使用json_serializable自动生成序列化代码
part 'example_model.g.dart';
@JsonSerializable()
class ExampleModel {
String name;
int age;
ExampleModel(this.name, this.age);
// json_serializable生成的序列化方法
factory ExampleModel.fromJson(Map<String, dynamic> json) => _$ExampleModelFromJson(json);
Map<String, dynamic> toJson() => _$ExampleModelToJson(this);
}
// 页面跳转时使用的路由
final routeName = '/example';
// 使用InheritedWidget在页面间传递数据
class ExampleModelProvider extends InheritedWidget {
final ExampleModel data;
ExampleModelProvider({Key key, @required this.data, Widget child})
: super(key: key, child: child);
@override
bool updateShouldNotify(ExampleModelProvider oldWidget) => data != oldWidget.data;
static ExampleModel of(BuildContext context) {
final ExampleModelProvider provider = context.dependOnInheritedWidgetOfExactType<ExampleModelProvider>();
return provider.data;
}
}
// 跳转到新页面并传递数据
Navigator.push(
context,
MaterialPageRoute(
settings: RouteSettings(name: routeName),
builder: (context) => ExamplePage(exampleModel: exampleModel),
),
);
// 接收数据的页面
class ExamplePage extends StatelessWidget {
final ExampleModel exampleModel;
ExamplePage({Key key, @required this.exampleModel}) : super(key: key);
@override
Widget build(BuildContext context) {
return ExampleModelProvider(
data: exampleModel,
child: Scaffold(
appBar: AppBar(
title: Text('Example Page'),
),
body: Center(
child: Text('Received data: ${ExampleModelProvider.of(context).name}'),
),
),
);
}
}
在这个代码示例中,我们首先定义了一个名为ExampleModel
的模型类,并使用json_serializable
包为其生成了序列化方法。然后,我们创建了一个名为ExampleModelProvider
的InheritedWidget
,用于在页面间传递数据。在页面跳转时,我们使用Navigator
将数据通过新页面的构造函数传递,并在新页面中通过ExampleModelProvider
获取和显示数据。
评论已关闭