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

news/2025/1/21 21:31:25/

动图更精彩

在这里插入图片描述

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/news/1565048.html

相关文章

初学者如何用 Python 写第一个爬虫?

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

Jvm垃圾回收机制与常见算法

什么是垃圾回收&#xff08;GC&#xff09;&#xff1f; 垃圾回收&#xff08;Garbage Collection&#xff0c;简称 GC&#xff09; 是编程语言运行时环境自动管理内存的一种机制。它的主要目的是自动释放不再使用的对象所占用的内存空间&#xff0c;从而避免内存泄漏和手动管…

使用 HTML 开发 Portal 页全解析

前言 在当今数字化时代&#xff0c;网站作为企业和个人展示信息、提供服务的重要窗口&#xff0c;其重要性不言而喻。而 Portal 页&#xff0c;作为网站的核心页面之一&#xff0c;承担着引导用户、整合信息等关键任务。那么&#xff0c;如何使用 HTML 开发一个功能齐全、界面…

AIGC视频生成模型:Meta的Emu Video模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video&#xff0c;作为Meta发布的第二款视频生成模型&#xff0c;在视频生成领域发挥关键作用。 &#x1f33a;优质专栏回顾&am…

svn tag

一般发布版本前&#xff0c;需要在svn上打个tag。步骤如下&#xff1a; 1、空白处右击&#xff0c;选择TortoiseSVN->Branch/tag; 2、填写To path&#xff0c;即tag的路基以及tag命名&#xff08;一般用版本号来命名&#xff09;&#xff1b;填写tag信息&#xff1b;勾选cr…

AdaBoost(Adaptive Boosting)算法

AdaBoost&#xff08;Adaptive Boosting&#xff0c;自适应提升&#xff09;是一种迭代的机器学习算法&#xff0c;它通过组合多个弱分类器来构建一个强分类器。AdaBoost 是最早且最著名的提升方法之一&#xff0c;因其简单性和有效性而在实践中得到广泛应用。以下是 AdaBoost …

STM32-串口-UART-Asynchronous

一&#xff0c;发送数据 #include "stdio.h" uint8_t hello[]"Hello,blocking\r\n"; HAL_UART_Transmit(&huart1,hello,sizeof(hello),500); 二&#xff0c;MicroLIB-printf(" hello\r\n") #include "stdio.h" #ifdef __GNUC…

大数据学习(36)- Hive和YARN

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…