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

每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用

引言

欢迎再次回到 每天一个Flutter开发小项目 系列博客!在之前的七篇博客中,我们已经掌握了 Flutter UI 构建、状态管理、路由导航、表单处理,甚至数据持久化等一系列核心技能。您已经能够构建功能相对完善的本地应用。

然而,在互联网时代,绝大多数应用都需要与服务器进行数据交互,从远程 API 获取数据,才能展现更丰富的内容和更强大的功能。今天,我们将聚焦 Flutter 应用的 “网络连接” —— 网络请求,并构建一个充满智慧和启迪的 每日名言应用,让您掌握 Flutter 应用连接互联网、获取远程数据的专业技巧。

通过本篇博客,您将深入学习:

  • Flutter 网络请求的核心概念: 理解 HTTP 协议,掌握 Flutter 中进行网络请求的基本流程和关键组件。
  • http 插件的专业应用: 深入学习 http 插件,掌握在 Flutter 应用中使用 http 插件发送网络请求、接收响应、处理数据等全流程。
  • 异步网络请求的最佳实践: 理解 Flutter 中网络请求的异步特性,掌握 Futureasync/await 等异步编程技巧,确保应用流畅性和用户体验。
  • JSON 数据解析: 学习如何解析从 API 接口返回的 JSON 数据,将 JSON 数据转换为 Dart 对象,方便在 Flutter 应用中使用。
  • 每日名言应用的功能实现: 构建一个简洁优雅的每日名言应用,包括每日名言展示、加载动画、错误处理等核心功能。
  • Flutter 应用联网能力的专业技能: 从网络请求发送到数据解析展示,全面提升 Flutter 应用联网能力的专业技能。

项目简介: 每日名言应用

我们的每日名言应用将围绕以下核心功能展开:

  • 每日名言展示: 应用启动后,从远程 API 获取一句每日名言,并在应用界面上优雅展示名言内容和作者。
  • 加载状态: 在网络请求过程中,显示加载动画,提升用户等待体验。
  • 错误处理: 当网络请求失败或 API 接口返回错误时,应用能够友好地提示用户,并提供重试机制 (可选,本篇博客核心聚焦网络请求,重试机制可选实现)。
  • 简洁优雅的UI: 应用界面设计简洁优雅,突出名言内容,提升用户阅读体验。

通过构建每日名言应用,我们将重点实践:

  • http 插件集成: 在 Flutter 应用中集成 http 插件,搭建网络请求环境。
  • API 接口调用: 调用远程每日名言 API 接口,发送 HTTP GET 请求。
  • JSON 数据解析: 解析 API 接口返回的 JSON 数据,提取名言内容和作者信息。
  • 异步操作处理: 使用 FutureBuilder Widget 处理异步网络请求结果,构建动态 UI。
  • Flutter 网络请求完整流程: 从网络请求发送到数据解析展示,完整实现 Flutter 网络请求的流程。

Flutter 网络请求核心概念详解

在开始构建每日名言应用之前,我们先来深入理解 Flutter 网络请求的核心概念,为后续的实战打牢理论基础。

  • HTTP 协议: 超文本传输协议 (Hypertext Transfer Protocol),是互联网上应用最广泛的网络协议之一,用于在客户端 (例如,Flutter 应用) 和服务器之间传输数据。 我们常用的网页浏览、API 接口调用等都基于 HTTP 协议。 HTTP 协议定义了客户端和服务器之间通信的请求 (Request)响应 (Response) 格式。

  • HTTP 请求方法: HTTP 协议定义了多种请求方法,常用的有:

    • GET: 获取资源,例如,从服务器获取数据,通常用于查询数据。 在每日名言应用中,我们将使用 GET 请求从 API 接口获取每日名言数据。
    • POST: 提交数据,例如,向服务器提交表单数据、上传文件等,通常用于创建或更新数据。
    • PUT: 更新资源,类似于 POST,但通常用于幂等性地更新资源 (多次请求结果相同)。
    • DELETE: 删除资源,例如,删除服务器上的数据。
  • URL (统一资源定位符): 统一资源定位符 (Uniform Resource Locator),用于唯一标识互联网上的资源 (例如,网页、图片、API 接口等)。 URL 通常由协议、域名、路径、查询参数等组成。 例如,https://api.example.com/quotes/daily 就是一个 URL,指向一个 API 接口,用于获取每日名言数据。

  • JSON (JavaScript 对象表示法): JavaScript 对象表示法 (JavaScript Object Notation),是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 JSON 格式常用于 API 接口的数据返回格式。 在每日名言应用中,我们将接收 API 接口返回的 JSON 数据,并解析 JSON 数据,提取名言内容和作者信息。

  • http 插件: Flutter 官方提供的 HTTP 客户端插件,用于在 Flutter 应用中发送 HTTP 请求、接收 HTTP 响应、处理 HTTP 头部、上传文件等。 http 插件提供了易于使用的 API,方便 Flutter 开发者进行网络编程。

  • 异步编程 (Future, async/await): 网络请求通常是耗时的操作,为了避免阻塞 UI 线程,影响用户体验,Flutter 中的网络请求操作都是 异步 (Asynchronous) 的。 Flutter 使用 Futureasync/await 等关键字来处理异步操作。

    • Future: Future 代表一个异步操作的最终结果,可以理解为一个“未来的值”,该值在异步操作完成后才会返回。 网络请求方法通常返回一个 Future 对象,表示网络请求的响应结果将在未来某个时刻返回。
    • async/await: async/await 是 Dart 中用于简化异步编程的关键字。 async 关键字用于声明一个异步函数,await 关键字用于等待一个 Future 对象完成,并获取 Future 对象的结果。 使用 async/await 可以使异步代码看起来更像同步代码,提高代码可读性。

实战步骤: 构建每日名言应用

接下来,我们将一步步使用 http 插件构建我们的每日名言应用。

步骤 1: 创建新的 Flutter 项目并添加 http 依赖

首先,创建一个新的 Flutter 项目,命名为 daily_quote_app

然后在 pubspec.yaml 文件中添加 http 依赖:

dependencies:flutter:sdk: flutterhttp: ^0.13.0 #  使用最新版本,请查阅 pub.dev 获取最新版本号

运行 flutter pub get 命令获取依赖。

步骤 2: 选择每日名言 API 接口

我们需要选择一个提供每日名言 API 接口的网站。 网上有很多免费的每日名言 API 接口,例如:

  • TheySaidSo Quote API: https://quotes.rest/qod.json (需要注册获取 API Key,免费版有请求次数限制)
  • 公共免费API合集 (github 仓库): https://github.com/public-apis/public-apis (可以在这个仓库中搜索 “quote” 关键词,找到其他免费的 quote API)
  • Inspirational Quotes API: https://api.quotable.io/random (简单易用,无需 API Key,返回 JSON 数据) 本篇博客将使用 Inspirational Quotes API

我们将使用 Inspirational Quotes API,它的 API 接口 URL 为: https://api.quotable.io/random,访问该 URL 将返回一个 JSON 数据,包含一句随机的名言。

步骤 3: 定义名言数据模型 (Quote)

我们需要定义一个 Quote 类来表示名言数据,包含名言内容和作者信息。

创建 lib/models/quote.dart 文件,定义 Quote 类:

class Quote {final String content; //  名言内容final String author; //  名言作者const Quote({ //  使用 const 构造函数required this.content,required this.author,});factory Quote.fromJson(Map<String, dynamic> json) { //  工厂构造函数,从 JSON 数据创建 Quote 对象return Quote

相关文章:

每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用

引言 欢迎再次回到 每天一个Flutter开发小项目 系列博客!在之前的七篇博客中,我们已经掌握了 Flutter UI 构建、状态管理、路由导航、表单处理,甚至数据持久化等一系列核心技能。您已经能够构建功能相对完善的本地应用。 然而,在互联网时代,绝大多数应用都需要与服务器进…...

C++Primer学习(4.8位运算符)

4.8位运算符 位运算符作用于整数类型的运算对象&#xff0c;并把运算对象看成是二进制位的集合。位运算符提供检查和设置二进制位的功能&#xff0c;如17.2节(第640页)将要介绍的&#xff0c;一种名为bitset的标准库类型也可以表示任意大小的二进制位集合,所以位运算符同样能用…...

在VSCode中使用MarsCode AI最新版本详解

如何在VSCode中使用MarsCode AI&#xff1a;最新版本详解与使用场景 在当今快速发展的软件开发领域&#xff0c;人工智能&#xff08;AI&#xff09;技术的应用已经变得越来越普遍。ByteDance推出的MarsCode AI是一款强大的AI编程助手&#xff0c;旨在帮助开发者更高效地编写代…...

可观测之Tracing-eBPF生态和发展

eBPF生态系统 eBPF已经不仅仅是一个内核技术&#xff0c;而是一个蓬勃发展的生态系统&#xff0c;涵盖了各种工具、库和项目&#xff0c;为可观测性、网络、安全等领域提供了强大的支持。 1. 核心工具与库 bcc (BPF Compiler Collection): 定位&#xff1a; 提供了更底层的e…...

linux 后台执行并输出日志

在Linux系统中&#xff0c;后台执行程序并输出日志通常有多种方法&#xff0c;这里列出几种常见的方法&#xff1a; 1. 使用&将命令放入后台 可以在命令的末尾加上&符号&#xff0c;将命令放入后台执行。例如&#xff1a; your_command > output.log 2>&1…...

C++ primer plus 第五节 循环

系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 文章目录 系列文章目录 文章目录 前言 一 for循环 总结 前言 由于作者看了后面的内容&…...

使用Hydra进行AI项目的动态配置管理

引言:机器学习中的超参数调优挑战 在机器学习领域,超参数调优是决定模型性能的关键环节。不同的模型架构,如神经网络中的层数、节点数,决策树中的最大深度、最小样本分割数等;以及各种训练相关的超参数,像学习率、优化器类型、批量大小等,其取值的选择对最终模型的效果…...

.bash_profile一些笔记

下方ffmpeg目录为/Users/sin/Downloads/kakaaaaa/bin/ffmpeg 第一种方法冒号后拼接路径 第二种方法冒号后拼接变量 第三种方法,依旧用PATH变量拼接,更清晰美观而已 export的作用 权限问题&#xff1a; 确保 /Users/sin/Downloads/kaka/bin/ffmpeg 有可执行权限&#xff08;通…...

数据虚拟化的中阶实践:从概念到实现

数据虚拟化的中阶实践:从概念到实现 在大数据时代,数据的数量、种类和来源呈现爆炸式增长,如何高效、灵活地访问和利用这些数据成为了企业面临的重要问题。数据虚拟化作为一种创新的技术,正逐渐成为解决这一难题的关键。它通过抽象化层将底层数据源与应用程序隔离,使得数…...

MongoDB安全管理

MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样&#xff0c;MongoDB内部提供了一套完整的权限防护机制。如下例所示&#xff1a; mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...

[STM32]从零开始的STM32 DEBUG问题讲解及解决办法

一、前言 最近也是重装了一次keil&#xff0c;想着也是重装了&#xff0c;也是去官网下载了一个5.41的最新版&#xff0c;在安装和配置编译器和别的版本keil都没太大的区别&#xff0c;但是在调试时&#xff0c;遇到问题了&#xff0c;在我Debug的System Viewer窗口中没有GPIO&…...

创建Order项目实现Clean Hexagonal架构

创建Order项目实现Clean & Hexagonal架构 前言 在上一节中&#xff0c;讲到了Clean & Hexagonal架构的理论部分&#xff0c;并且通过图形解释了从MVC架构到清洁架构到演变。下面我们通过创建项目的方式来进一步理解Clean & Hexagonal架构。 1.项目创建 1. 项目…...

【算法】图论 —— Floyd算法 python

洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m&#xff0c;分别代表点的个数和边的条数。 接下来 m m m 行&#xff0c;每行三…...

YOLOv5 + SE注意力机制:提升目标检测性能的实践

一、引言 目标检测是计算机视觉领域的一个重要任务&#xff0c;广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本&#xff0c;以其高效性和准确性在实际应用中表现出色。然而&#xff0c;随着应用场景的复杂化&#xff0c;传统的卷积神经网络在处…...

基于fast-whisper模型的语音识别工具的设计与实现

目录 摘 要 第1章 绪 论 1.1 论文研究主要内容 1.1.1模型类型选择 1.1.2开发语言的选择 1.2 国内外现状 第2章 关键技术介绍 2.1 关键性开发技术的介绍 2.1.1 Faster-Whisper数据模型 2.1.2 Django 第3章 系统分析 3.1 构架概述 3.1.1 功能构架 3.1.2 模块需求描述 3.2 系统开…...

python中单例模式应用

数据库连接池单例模式 1. 为什么使用单例模式 创建数据库连接是一个昂贵的过程&#xff08;涉及网络通信、认证等&#xff09;。单例模式的连接池可以在程序启动时初始化一组连接&#xff0c;并在整个生命周期中重用这些连接&#xff0c;而不是每次请求都新建连接。同时还可…...

鸿蒙HarmonyOS 开发简介

鸿蒙开发入门教程 一、技术简介 鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是面向万物互联时代的全场景分布式操作系统&#xff0c;具备分布式软总线、分布式数据管理、分布式任务调度等核心能力&#xff0c;能让设备间实现无缝连接与协同&#xff0c;为用户提供统一、流…...

2. 在后端代码中加入日志记录模块

1. 说明 日志模块基本上是每一个软件系统开发中必不可少的&#xff0c;主要用于持久记录一些代码运行中的输出信息&#xff0c;辅助编码人员进行代码调试&#xff0c;以及后期软件上线运行报错分析。在Python中加入日志模块比较简单&#xff0c;只需要借助logging和RotatingFi…...

Linux软硬链接

目录 什么是软链接&#xff1f;软链接的特点软链接的原理什么是硬链接硬链接的特点硬链接的原理 什么是软链接&#xff1f; 在Linux操作系统中&#xff0c;文件系统的核心概念之一是链接&#xff0c;包括软链接&#xff08;符号链接&#xff09;和硬链接。这些链接提供了访问文…...

Kali换源

【刚忘了】 下面这个 里面的一删放就好了 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...