【FlutterDart】MVVM(Model-View-ViewModel)架构模式例子-dio版本(31 /100)

ops/2025/1/19 7:29:00/

动图更精彩

在这里插入图片描述

dio & http

在Flutter中,dio和http是两个常用的HTTP请求库,它们各有优缺点。以下是对这两个库的详细对比:
功能特性

http:

功能:提供了基本的HTTP请求和响应功能,如GET、POST、PUT、DELETE等。
易用性:API简单,易于上手。
功能丰富度:功能相对简单,没有提供拦截器、请求取消、请求日志记录等高级功能。

dio:

功能:功能强大,支持多种高级功能,如拦截器、请求取消、请求日志记录、Cookie管理、文件上传/下载、超时设置、自定义适配器等。
易用性:API相对复杂,但提供了丰富的功能和灵活的配置。
功能丰富度:功能丰富,支持多种高级功能,适合复杂的应用场景。
使用方式
http:

import 'package:http/http.dart' as http;void httpNetwork() async {final client = http.Client();final url = Uri.parse("https://api.example.com/data");final response = await client.get(url);if (response.statusCode == 200) {print(response.body);} else {print(response.statusCode);}
}

dio:

import 'package:dio/dio.dart';void dioNetwork() async {Dio dio = Dio();final response = await dio.get("https://api.example.com/data");if (response.statusCode == 200) {print(response.data);} else {print(response.statusCode);}
}

性能比较
http:平均耗时为100ms。
dio:平均耗时为80ms,性能表现更好。
生态支持
http:
知名度:作为Flutter官方提供的库,具有很高的知名度和活跃度。
文档和社区支持:文档和社区支持完善,易于查找和学习。
dio:
知名度:也具有很高的知名度和活跃度,社区支持良好。
文档和社区支持:提供了详细的文档和示例,社区活跃度高。
结论
简单易用:如果你需要一个简单易用的HTTP请求库,可以选择http。
功能丰富:如果你需要更丰富的功能和更好的性能,可以选择dio
生态支持:http和dio在生态支持方面更加成熟,文档和社区支持完善。

代码:

// modelimport 'dart:convert';import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';class Result {String data;Result(this.data);
}//ViewModel
class DioViewModel extends ChangeNotifier {Result? _result;Result? get result => _result;bool _isLoading = false;bool get isLoading => _isLoading;Future<void> fetchDio() async {_isLoading = true;notifyListeners();var url = 'https://api.apiopen.top/api/sentences';// url = 'https://cn.bing.com/';final response = await Dio().get(url);if (response.statusCode == 200) {if (response.data is String) {_result = Result(response.data);} else {var str = json.encode(response.data);_result = Result(str);}} else {throw Exception('Failed to load user');}_isLoading = false;notifyListeners();}
}class DioMvvmDemo extends StatelessWidget {const DioMvvmDemo({super.key});Widget build(BuildContext context) {return ChangeNotifierProvider(create: (context) => DioViewModel(),child: DioMvvmView(),);}
}class DioMvvmView extends StatelessWidget {const DioMvvmView({super.key});Widget build(BuildContext context) {return Column(children: [Consumer<DioViewModel>(builder: (context, viewModel, child) {if (viewModel.isLoading) {return Center(child: CircularProgressIndicator(),);} else if (viewModel.result == null) {return Center(child: Text('result not found'));} else {return Text('result=${viewModel.result!.data}');}}),IconButton(onPressed: () {context.read<DioViewModel>().fetchDio();},icon: Icon(Icons.send))],);}
}

http://www.ppmy.cn/ops/151313.html

相关文章

开发神器之cursor

文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器&#xff0c;集成了先进的 AI 技术&#xff0c;旨在提升编程效率。以下是其主要特点和功能&a…

鸿蒙UI(ArkUI-方舟UI框架)-开发布局

文章目录 开发布局1、布局概述1&#xff09;布局结构2&#xff09;布局元素组成3&#xff09;如何选择布局4&#xff09;布局位置5&#xff09;对子元素的约束 2、构建布局1&#xff09;线性布局 (Row/Column)概述布局子元素在排列方向上的间距布局子元素在交叉轴上的对齐方式(…

优选算法《二分查找》

在之前的学习当中我们已经初步了解过了二分查找的整体逻辑以及二分查找&#xff0c;接下来我们在本篇当中将系统的来学习二分查找的使用方式以及在什么情况下可以使用二分查找。在之前的学习当中我们了解到的二分查找是要求在有序的数组当中当数组元素有序时才能使用&#xff0…

mysql打开报错fail to connecto to mysql at 127.0.0.1:3306 with user root

MySQL密码也正确的情况下&#xff0c;即便是以管理员身份运行也会出现这个报错&#xff0c;解决方式如下&#xff1a; 1.搜索服务 2.找到MySQL设定启动 3.再次输入密码&#xff0c;点击test connection就可以啦

从零创建一个 Django 项目

1. 准备环境 在开始之前&#xff0c;确保你的开发环境满足以下要求&#xff1a; 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL&#xff0c;确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境&#xff…

微信小程序:中途退出原页面,再次进入无法回到退出时的位置

相信很多微信小程序的开发者都会碰到这样的问题&#xff0c;那今天我们就来详细的看下如何解决 一、使用 scroll-view 组件保存滚动位置&#xff1a; 在 wxml 文件中&#xff0c;使用 scroll-view 组件包裹需要滚动的内容。在 data 中定义一个变量来存储 scroll-view 的 scro…

vscode【实用插件】Material Icon Theme 美化文件图标

安装 在 vscode 插件市场的搜索 Material Icon Theme点 安装 效果

SQL Prompt 插件

SQL Prompt 插件 注&#xff1a;SQL Prompt插件提供智能代码补全、SQL格式化、代码自动提示和快捷输入等功能&#xff0c;非常方便&#xff0c;可以自行去尝试体会。 1、问题 SSMS&#xff08;SQL Server Management Studio&#xff09;是SQL Server自带的管理工具&#xff0c…