1. models/post_model.dart

    • 定义 Post 数据模型
    • 包含 fromJson() 方法用于解析 JSON
  2. controllers/post_controller.dart

    • 管理帖子数据的获取和状态
    • 使用 http 包请求 API
    • 通过 RxList 和 RxBool 实现响应式状态管理
  3. views/post_list_view.dart

    • 展示帖子列表的 UI
    • 使用 Obx 监听状态变化
    • 包含加载中、错误和数据展示三种状态
  4. main.dart

    • 应用入口点
    • 使用 GetMaterialApp 作为根组件
    • 设置主题并指定首页

post_controller.dart

// lib/controllers/post_controller.dart
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import '../models/post_model.dart';class PostController extends GetxController {// 响应式状态final RxList<Post> posts = <Post>[].obs;final RxBool isLoading = false.obs;final RxString? error = RxString?('');// 获取帖子列表Future<void> fetchPosts() async {isLoading.value = true;error.value = null;try {final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'),);if (response.statusCode == 200) {final List<dynamic> jsonData = json.decode(response.body);// 解析JSON并更新状态posts.assignAll(jsonData.map((item) => Post.fromJson(item)).toList());} else {error.value = '请求失败: ${response.statusCode}';}} catch (e) {error.value = '发生错误: $e';} finally {isLoading.value = false;}}// 初始化@overridevoid onInit() {super.onInit();fetchPosts(); // 控制器初始化时加载数据}
}    

post_model.dart

// lib/models/post_model.dart
class Post {final int id;final int userId;final String title;final String body;Post({required this.id,required this.userId,required this.title,required this.body,});// 从JSON解析factory Post.fromJson(Map<String, dynamic> json) {return Post(id: json['id'] as int,userId: json['userId'] as int,title: json['title'] as String,body: json['body'] as String,);}
}    

post_list_view.dart

// lib/views/post_list_view.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/post_controller.dart';class PostListView extends StatelessWidget {const PostListView({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {// 获取控制器实例final PostController controller = Get.put(PostController());return Scaffold(appBar: AppBar(title: const Text('Posts'),centerTitle: true,),body: Obx(() {// 加载状态if (controller.isLoading.value) {return const Center(child: CircularProgressIndicator());}// 错误状态if (controller.error.value != null) {return Center(child: Text(controller.error.value!));}// 数据为空if (controller.posts.isEmpty) {return const Center(child: Text('没有数据'));}// 数据列表return ListView.builder(itemCount: controller.posts.length,itemBuilder: (context, index) {final post = controller.posts[index];return Card(margin: const EdgeInsets.all(8.0),elevation: 2,child: ListTile(leading: CircleAvatar(child: Text(post.id.toString())),title: Text(post.title,style: const TextStyle(fontWeight: FontWeight.bold),),subtitle: Text(post.body),onTap: () {// 点击显示详情Get.snackbar('Post #${post.id}','用户ID: ${post.userId}\n标题: ${post.title}',snackPosition: SnackPosition.BOTTOM,);},),);},);}),);}
}    

main.dart

// lib/main.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'views/post_list_view.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return GetMaterialApp(title: 'Flutter GetX Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: const PostListView(),);}
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91802.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91802.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91802.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十五届全国大学生数学竞赛初赛试题(非数学专业类A卷)

第十五届全国大学生数学竞赛初赛试题(非数学专业类A卷) 文章目录第十五届全国大学生数学竞赛初赛试题(非数学专业类A卷)题目速览逐题详解题目速览 求极限&#xff1a; lim⁡x→3x39−62−x3−23.\lim\limits_{x \to 3} \frac{\sqrt{x^3 9} - 6}{2 - \sqrt{x^3 - 23}} \rule{2…

ROS1/Linux——Ubuntu、ROS1虚拟机环境配置

ROS1/Linux——Ubuntu、ROS1虚拟机环境配置 文章目录ROS1/Linux——Ubuntu、ROS1虚拟机环境配置编辑时间&#xff1a;系统环境Linux镜像下载Ubuntu相关链接iso镜像下载VMware操作虚拟机安装步骤基础设置设置语言设置窗口分辨率、图标大小等终端固定在左侧栏显示隐藏文件夹其他问…

万字解析LVS集群

一、集群和分布式介绍1.1、诞生的原因单台设备 “又贵又弱又容易挂”&#xff0c;扛不住现代业务的 “海量访问、海量数据、复杂计算”&#xff1b;集群 / 分布式让多台设备 “抱团干活”&#xff0c;分担压力&#xff08;流量、存储、计算&#xff09;&#xff0c;还能 “坏了…

关于博客后续内容会以xmind内容转markdown格式来呈现

自己感觉不正确的地方 一直感觉学啥东西记到博客里&#xff0c;这样就方便后续回顾或者查找 但csdn貌似不适合全局搜索&#xff0c;也就是我居然先要知道我对应的模糊点对应到哪篇文章&#xff0c;然后再到那篇文章里找&#xff0c;简直麻烦死了&#xff0c;而且另外一个毛病是…

Python - 数据分析三剑客之Pandas

阅读前可参考NumPy文章 https://blog.csdn.net/MinggeQingchun/article/details/148253682https://blog.csdn.net/MinggeQingchun/article/details/148253682 ‌Pandas是Python中一个强大的开源数据分析库&#xff0c;专门用于处理结构化数据&#xff08;如表格、时间序列等&…

深度解析:Python实战京东资产拍卖平台爬虫,从ID抓取到详情数据落地

深度解析:Python实战京东资产拍卖平台爬虫,从ID抓取到详情数据落地 对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学(系统理论和实战教程)、提供接单兼职渠道:https://blog.csdn.net/weixin_35770067/article/details/142514698 文章目录 深度解析:Python实战京东…

ServletConfig 接口详解

ServletConfig 接口详解 1. 核心概念 ServletConfig 是 Servlet 规范中定义的核心接口&#xff0c;用于在 Servlet 初始化阶段向 Servlet 传递配置信息。每个 Servlet 都有自己独立的 ServletConfig 对象。 2. 关键特性特性说明唯一性每个 Servlet 实例拥有独立的 ServletConfi…

Maven学习总结(62)—— Maven 打包瘦身和提速解决方案

臃肿的 Maven 项目 在 Java 项目开发中,Maven 作为强大的项目管理和构建工具,极大地简化了依赖管理和项目构建过程。但随着项目的不断演进,依赖的 Jar 包越来越多,我们的 Maven 项目也逐渐变得臃肿不堪。曾经,我参与维护一个大型的 Spring Boot 项目,随着业务功能的不断…

【Qt开发】Qt的背景介绍(三)-> 认识Qt Creator

目录 1 -> Qt Creator概览 2 -> 使用Qt Creator创建项目 2.1 -> 新建项目 2.2 -> 选择项目模板 2.3 -> 选择项目路径 2.4 -> 选择构建系统 2.5 -> 填写类信息设置界面 2.6 -> 选择语言和翻译文件 2.7 -> 选择Qt套件 2.8 -> 选择版本控…

HTML5中的自定义属性

自定义属性&#xff08;Custom Attributes&#xff09; 允许在标准 HTML 属性之外&#xff0c;为元素添加额外的元数据&#xff08;metadata&#xff09;。 1. 标准方式&#xff1a;data-* 属性 HTML5 引入了 data-* 前缀的自定义属性规范&#xff0c;所有以 data- 开头的属性都…

前端项目利用Gitlab CI/CD流水线自动化打包、部署云服务

叠甲前言 本文仅作为个人学习GitLab的CI/CD功能记录&#xff0c;不适合作为专业性指导&#xff0c;如有纰漏&#xff0c;烦请君指正。 Gitlab的CI/CD做什么用的 自工作以来&#xff0c;去过大大小小公司&#xff0c;有一些公司技术人员专业性欠佳&#xff0c;每当产品经理或…

基于typescript严格模式以实现undo和redo功能为目标的命令模式代码参考

下面是一个完整的、严格模式下的 TypeScript 实现&#xff0c;包含 CommandManager、Command 和 CompositeCommand 类&#xff0c;支持 undo/redo 功能。完整实现代码1. Command 接口和基类// src/commands/ICommand.ts export interface ICommand {execute(): void;undo(): vo…

2022年CIE SCI2区TOP,NSGA-II+直升机-无人机搜救任务分配,深度解析+性能实测

目录1.摘要2.数学模型3.求解方法4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流1.摘要 无人机任务分配对于保障搜救活动高效有序开展具有重要意义&#xff0c;但现有研究较少考虑无人机作业环境与性能对任务分配的影响。针对低空风场和地形因素对无人机能耗与性能…

暑期算法训练.4

目录 15.力扣 904.水果成篮 15.1 题目解析&#xff1a; 15.2 算法思路&#xff1a; 15.2.1 暴力解法&#xff1a; 15.2.1 滑动窗口 15.3代码演示&#xff1a; 15.4 总结反思&#xff1a; 16 力扣 438.找出字符串中所有字母的异位词 16.1 题目解析&#xff1a; 16.2算法…

关于个人博客系统的测试报告

1&#xff09;项目背景2&#xff09;项目功能介绍 登陆写博客/编辑已存在博客删除博客注销 2&#xff09;基于项目功能设计相关测试用例3&#xff09;基于测试用例编写自动化测试 准备工作登陆界面相关博客首页相关博客详情页相关编辑博客相关删除博客相关注销相关 4&#xff0…

Spring Boot 与微服务详细总结

一、Spring Boot 核心概述 Spring Boot 是简化 Spring 应用开发的框架&#xff0c;作为 Spring 技术栈的整合方案和 J2EE 开发的一站式解决方案&#xff0c;其核心优势体现在&#xff1a; 快速创建独立运行的 Spring 项目&#xff0c;轻松集成主流框架内置 Servlet 容器&…

轻松上手:从零开始启动第一个 Solana 测试节点

嗨&#xff0c;各位技术爱好者们&#xff01; 大家是否对 Solana 的“光速”交易处理能力感到好奇&#xff1f;或者你是一名开发者&#xff0c;正准备在 Solana 上构建下一个杀手级 dApp&#xff1f;无论大家是出于学习目的还是实际开发需求&#xff0c;亲手运行一个 Solana 节…

Gerrit workflow

提交代码 每次提交代码前&#xff0c;先执行 git pull --rebase &#xff0c;确保已经合并天上代码&#xff0c;解决冲突 git add git commit -m git push origin HEAD:refs/for/{BRANCH_NAME} 可考虑设置 alias 方式&#xff0c;参考下文 CR-2 情况处理(verify-1情况一样处理…

量化交易如何查询CFD指数实时行情

CFD即所谓的差价合约&#xff0c;是投资者在不拥有实际资产的情况下&#xff0c;交易金融市场的一种方式。最近笔者研究这一块比较多&#xff0c;但查遍整个中文互联网却很少找到关于CFD实时行情的查询教程。因此有了这篇文章。以下我将通过一个简单的Python代码示例&#xff0…

sql练习二

首先&#xff0c;建表。创建学生表和score表接着导入创建好基础信息就可以开始做了。3、分别查询student表和score表的所有记录4、查询student表的第2条到第5条记录5、从student表中查询计算机系和英语系的学生的信息6、从student表中查询年龄小于22岁的学生信息7、从student表…