当前位置: 首页 > news >正文

Flutter基础(前端教程⑧-数据模型)

这个示例展示了如何创建数据模型、解析 JSON 数据,以及在 UI 中使用这些数据:

import 'package:flutter/material.dart';
import 'dart:convert';void main() {// 示例:手动创建User对象final user = User(id: 1,name: '张三',age: 25,email: 'zhangsan@example.com',isPremium: true,);// 示例:将User对象转为JSONfinal jsonData = user.toJson();print('转为JSON: $jsonData');// 示例:从JSON解析User对象final jsonString = '{"id":2,"name":"李四","age":30,"email":"lisi@example.com","isPremium":false}';final parsedUser = User.fromJson(json.decode(jsonString));print('解析后的用户: ${parsedUser.name}');runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: const Text('数据模型示例')),body: const Center(child: Text('查看控制台输出了解数据模型用法'),),),);}
}// 数据模型
class User {final int id;final String name;final int age;final String email;final bool isPremium;// 构造函数User({required this.id,required this.name,required this.age,required this.email,required this.isPremium,});// 从JSON解析为User对象factory User.fromJson(Map<String, dynamic> json) {return User(id: json['id'] ?? 0, // 提供默认值,防止nullname: json['name'] ?? '',age: json['age'] ?? 0,email: json['email'] ?? '',isPremium: json['isPremium'] ?? false,);}// 将User对象转为JSONMap<String, dynamic> toJson() {return {'id': id,'name': name,'age': age,'email': email,'isPremium': isPremium,};}// 重写toString方法,方便打印对象信息@overrideString toString() {return 'User{id: $id, name: $name, age: $age, email: $email, isPremium: $isPremium}';}
}

多条数据

1. 数据模型

class User {final int id;final String name;final int age;User({required this.id,required this.name,required this.age,});// 从JSON解析单个用户factory User.fromJson(Map<String, dynamic> json) {return User(id: json['id'] ?? 0,name: json['name'] ?? '',age: json['age'] ?? 0,);}// 解析用户列表static List<User> fromJsonList(List<dynamic> jsonList) {return jsonList.map((json) => User.fromJson(json)).toList();}
}

2. 模拟 JSON 数据与解析示例

// 模拟API返回的用户列表JSON
String mockUserListJson = '''
[{"id": 1, "name": "张三", "age": 25},{"id": 2, "name": "李四", "age": 30},{"id": 3, "name": "王五", "age": 22}
]
''';// 解析示例
void parseUsers() {final List<dynamic> jsonList = json.decode(mockUserListJson);final List<User> users = User.fromJsonList(jsonList);print('用户数量: ${users.length}');print('第一个用户: ${users[0].name}');
}

3. UI 展示(列表组件)

class UserListPage extends StatelessWidget {@overrideWidget build(BuildContext context) {// 解析模拟数据final List<dynamic> jsonList = json.decode(mockUserListJson);final List<User> users = User.fromJsonList(jsonList);return Scaffold(appBar: AppBar(title: const Text('用户列表')),body: ListView.builder(itemCount: users.length,itemBuilder: (context, index) {final user = users[index];return ListTile(leading: CircleAvatar(child: Text('${user.id}')),title: Text(user.name),subtitle: Text('年龄: ${user.age}'),trailing: const Icon(Icons.arrow_forward_ios),onTap: () {// 点击事件处理ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('点击了 ${user.name}')),);},);},),);}
}

http://www.dtcms.com/a/270622.html

相关文章:

  • Elasticsearch RESTful API入门:基础搜索与查询DSL
  • C#项目 在Vue/React前端项目中 使用使用wkeWebBrowser引用并且内部使用iframe网页外链 页面部分白屏
  • 数据管理新范式:基于Docker的私有云存储系统构建指南
  • 十一、K8s细粒度权限管理RBAC
  • 异步进阶:C#的Task.WhenAll——如何开启多个异步任务
  • ReactNative【实战系列教程】我的小红书 6 -- 购物(含商品搜索、商品分类、商品列表)
  • 编写产品需求文档:黄历日历小程序
  • [Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
  • React面试高频考点解析
  • LeetCode Hot 100 搜索二维矩阵 II
  • langchain从入门到精通(四十一)——基于ReACT架构的Agent智能体设计与实现
  • [附源码+数据库+毕业论]基于Spring Boot+mysql+vue结合内容推荐算法的学生咨询系统
  • RedisCommandExecutionException: ERR unknown command ‘LPOS‘
  • 树莓派5-系统 Debian 12 开启VNC远程访问踩坑记录
  • vue3面试题(个人笔记)
  • uniapp AndroidiOS 定位权限检查
  • ragflow_多模态文档解析与正文提取策略
  • 《设计模式之禅》笔记摘录 - 5.代理模式
  • Flutter基础(前端教程⑨-图片)
  • Robot之眼CMOS传感器静电防护指南
  • LeetCode热题100—— 32. 最长有效括号 (hard)
  • 零基础上手 Amazon DynamoDB:NoSQL 数据库服务的核心概念与快速搭建指南
  • Android-重学kotlin(协程源码第二阶段)新学习总结
  • 安全管理协议(SMP):配对流程、密钥生成与防中间人攻击——蓝牙面试核心考点精解
  • Qt自定义控件(9)——径向渐变QRadialGradient、圆锥渐变QConicalGradient
  • 华为OD机试_2025 B卷_观看文艺汇演问题(Python,100分)(附详细解题思路)
  • Amazon S3 对象存储服务深度解析:存储原理、应用场景与实战指南
  • Hexo + Butterfly + Vercel 完整个人Blog部署指南
  • 量子化学计算GPU化:ORCA与Gaussian的CUDA加速对比(电子积分计算中的Warpshuffle指令实战应用)
  • 如何给网页增加滚动到顶部的功能