flutter调用api_如何在Flutter(REST API)中进行API调用

flutter调用api

在本文中,我们将看一下如何快速进行API调用并使用简单的REST API。

在这里查看我在Flutter上的其他一些帖子:

  • Flutter vs React Native
  • 了解Flutter中的BLoC架构 (强烈建议)
  • 在Flutter中构建ListView(RecyclerView) (推荐)

我们将创建一个简单的应用程序,在其中我将对以下网址进行API调用: https : //jsonplaceholder.typicode.com/posts并在列表中打印出标题。

这将演示如何在flutter中进行API调用以及如何使用convert包解码json 。 所以,让我们开始吧。

首先,在Android Studio中创建一个新的flutter项目,并根据需要命名。

我将其命名为: flutter_api_calls

接下来,清除您获得的所有样板代码。 我们将从头开始编写所有内容。

接下来,我将设置项目的框架。 这意味着添加一个AppBar,一个脚手架并编写主要功能。

看起来像这样

 import 'package:flutter/material.dart' ;  void main() => runApp(MyApp());  MyApp class extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo' , theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Api Call' ), ); }  }  class MyHomePage extends StatefulWidget { MyHomePage({Key key, this .title}) : super (key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState();  }  class _MyHomePageState extends State<MyHomePage> {   @override Widget build(BuildContext context) { return null ; }    } 

首先,我们需要在pubspec.yaml文件中包含http包。 在依赖项下添加此行,该行将显示fld sdk。 这是您的pubspec.yaml的样子:

 name: flutter_api_calls  description: Flutter application to demonstrate api calls.  # The following defines the version and build number for your application.  # A version number is three numbers separated by dots, like 1.2 . 43  # followed by an optional build number separated by a +.  # Both the version and the builder number may be overridden in flutter  # build by specifying --build-name and --build-number, respectively.  # In Android, build-name is used as versionName while build-number used as versionCode.  # Read more about Android versioning at https: //developer.android.com/studio/publish/versioning  # In iOS, build-name is used as CFBundleShortVersionString build-number used as CFBundleVersion. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.  # Read more about iOS versioning at  # https: //developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html  version: 1.0 . 0 + 1  environment: sdk: ">=2.1.0 <3.0.0"  dependencies: flutter: sdk: flutter http: ^ 0.12 . 0 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^ 0.1 . 2  dev_dependencies: flutter_test: sdk: flutter 

现在,将http包导入到您的main.dart文件中:

 import 'package:http/http.dart' as http; 

让我们创建一个函数getData(),该函数将从API中获取数据。

 Future<String> getData() {  } 

我们将进行API调用,这可能需要一些时间才能返回响应。 这种情况需要异步编程。

基本上,我们需要等到api调用完成并返回结果。 一旦完成,我们将显示列表。

所以,这就是我们要做的。 我们将使用http对象进行api调用,并等待其完成。

 Future<String> getData() async { var response = await http.get( Uri.encodeFull( " https://jsonplaceholder.typicode.com/posts " ), headers: { "Accept" : "application/json" }); setState(() { data = json.decode(response.body); }); return "Success" ;  } 

要在函数中使用await关键字,我们需要将函数标记为异步。 并且任何异步函数都具有Future <T>的返回类型,其中T可以为void,int,string等。

为了解码数据,我们使用:

 import 'dart:convert' ; 

它为我们提供了json.decode()方法,该方法可用于反序列化JSON 。 解码数据后,我们将通知视图层次结构该数据可用,并且可以将其填充到listview中。

这是代码的真正内容。 现在,我们需要向flutter应用程序添加一个列表视图

接下来,我们将在flutter应用程序中添加一个listview。 如果您不知道如何在flutter中创建列表视图,请快速阅读我的另一篇文章:

  • 阅读: 在Flutter中构建ListView(RecyclerView)

让我们创建一个函数getList(), 如果获取数据 ,它将返回List; 如果响应尚未到达, 返回“ please wait”消息。

 Widget getList() { if (data == null || data.length < 1 ) { return Container( child: Center( child: Text( "Please wait..." ), ), ); } return ListView.separated( itemCount: data?.length, itemBuilder: (BuildContext context, int index) { return getListItem(index); }, separatorBuilder: (context, index) { return Divider(); }, );  } 

请注意,我们使用的是ListView.separated而不是普通的ListView.builder 。 原因是此列表视图已内置对分隔项的支持。 我们不需要显式检查索引。

为此构建列表项非常简单。 只需创建一个文本小部件并为其添加一些样式即可。

 Widget getListItem( int i) { if (data == null || data.length < 1 ) return null ; if (i == 0 ) { return Container( margin: EdgeInsets.all( 4 ), child: Center( child: Text( "Titles" , style: TextStyle( fontSize: 22 , fontWeight: FontWeight.bold, ), ), ), ); } return Container( child: Container( margin: EdgeInsets.all( 4.0 ), child: Padding( padding: EdgeInsets.all( 4 ), child: Text( data[i][ 'title' ].toString(), style: TextStyle(fontSize: 18 ), ), ), ), );  } 

您可以在github上找到完整的代码:https://github.com/Ayusch/flutter-api-calls

这是一个非常简单快捷的示例,说明如何开始在flutter中进行API调用。 尽管我建议为您的应用程序遵循适当的体系结构,但不要将所有代码都写在一个地方。

BLoC抖动架构非常强大。 在此处查看: Flutter中的BLoC体系结构 。 这将使您深入了解如何为Flutter应用程序编写健壮的BLoC架构

*重要* :加入面向移动开发人员的AndroidVille SLACK工作区,人们可以在这里分享对最新技术的了解,尤其是在Android开发,RxJava,Kotlin,Flutter和一般的移动开发方面

翻译自: https://www.javacodegeeks.com/2019/09/how-to-make-an-api-call-in-flutter-rest-api.html

flutter调用api

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

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

相关文章

java重载与重写的区别+重写父类equals方法的完美实现

【0】README 0.1&#xff09; 本文章节【1】和【2】的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html &#xff1b; 旨在区分重载与重写以及他们的相关概念&#xff1b; 0.2&#xff09; 本文章节【3】的内容转自 http://blog.csdn.net/pacoson…

checkpoint_通过Main的Checkpoint Restore加快Java启动速度

checkpointJava虚拟机为已编译为字节码 &#xff08;但不一定是用Java编写&#xff09;的应用程序提供了托管运行时环境。 与为特定平台静态编译的代码相比&#xff0c;这为应用程序开发人员提供了许多好处&#xff0c;并且通常可以提高性能。 JVM通过垃圾回收器 &#xff08;G…

泛型数组列表ArrayList

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清 java 中的 数组列表 ArrayList&#xff1b; 【2】数组列表 ArrayList 2.1&#xff09;ArrayList&#xff1a; ArrayList 具有自动调节数组容量的功能&#xff0c; 而不需要为此…

大数据聚类分析用于预测_多模态数据中的非负矩阵分解用于分割和标签预测

引用Akata Z, Thurau C, Bauckhage C. Non-negative matrix factorization in multimodality data for segmentation and label prediction[C]. 2011.摘要随着 Internet 上带注释的多媒体数据的可用性不断提高&#xff0c;要求有一种技术可以实现不同类型数据的原则性联合处理。…

程序员 rs编码_为什么声明性编码使您成为更好的程序员

程序员 rs编码在许多情况下&#xff0c;具有功能组成的声明式解决方案提供了优于传统命令式代码的出色代码指标。 阅读本文并了解如何使用具有功能组成的声明性代码成为一名更好的程序员。 在本文中&#xff0c;我们将仔细研究三个问题示例&#xff0c;并研究用于解决这些问题…

对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 自动拆箱&#xff08;装箱&#xff09;、printf的参数数量可变 以及 枚举类的详细说明&#xff1b; 0.2&#xff09; 源代码&#xff1a; https://github.com/pacosonTang/core…

go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态

三次握手置位概念&#xff1a;根据TCP的包头字段&#xff0c;存在3个重要的标识ACK、SYN、FINACK&#xff1a;表示验证字段 SYN&#xff1a;位数置1&#xff0c;表示建立TCP连接 FIN&#xff1a;位数置1&#xff0c;表示断开TCP连接三次握手过程说明&#xff1a;1.由客户端发送…

java序列化深克隆_如何在内存序列化中使用Java深克隆对象

java序列化深克隆在我以前的文章中&#xff0c;我解释了深度克隆和浅层克隆之间的区别 &#xff0c; 以及复制构造函数和防御性复制方法比默认的Java克隆如何更好。 使用复制构造函数和防御性复制方法进行的Java对象克隆当然具有某些优势&#xff0c;但是我们必须显式编写一些…

java反射机制+继承设计技巧

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java反射机制 &#xff1b;最后还顺带提出了 继承设计的技巧&#xff1b; 【1】反射相关 1&#xff09;反射定义&#xff1a;能够分析类能力的程序称为反射&#xff1b; 2&…

60秒计时器的仿真电路_基于伏秒平衡的同步整流方案探讨

为了提高电源的效率和功率密度&#xff0c;尤其是低输出电压的应用场合&#xff0c;同步整流是不可或缺的。图1-1 反激输出二极管损耗比如上图的反激电源如果输出二极管 Vf0.7V&#xff0c;输出电压 Vout3V 则效率不会高于3/(30.7)81%。为了提升效率一般会选用低导通压降的肖特…

利用反射机制创建新类的两种方式及比较

【0】README 0.1&#xff09; 本文描述源代码均 转自 http://blog.csdn.net/fenglibing/article/details/4531033 &#xff0c; 旨在深入理解 如何利用反射机制创建类实例&#xff1b; 0.2&#xff09; 转载的源代码&#xff0c;参见 https://github.com/pacosonTang/core-ja…

如何设计高效测试用例_高效的企业测试-单元和用例测试(2/6)

如何设计高效测试用例在本系列的第一部分中&#xff0c;我们看到了有效测试应满足的一些普遍适用的原则和约束。 在这一部分中&#xff0c;我们将仔细研究代码级单元测试和组件或用例测试。 单元测试 单元测试验证单个单元&#xff08;通常是类&#xff09;的行为&#xff0c…

php mysql study_PHPstudy升级mysql数据库

首先查看phpstudy的mysql版本&#xff1a;方法一 使用mysql的version函数&#xff1a;mysql> selectversion();方法二 status命令mysql> status&#xff1b;方法三 直接在cmd下输入命令查看mysql -vmysql --help下面开始升级数据库1、备份好自己的数据库2、清空phpstudy…

selenium 等待_Selenium等待:内隐,外显,流利和睡眠

selenium 等待Selenium等待页面加载在Selenium脚本中起着重要的作用。 它们有助于使它们不易剥落&#xff0c;更可靠。 Selenium提供多次等待&#xff0c;以根据某些条件在脚本执行中提供足够的等待或暂停。 从而确保您在使用Selenium执行自动化测试时不会导致脚本失败。 在本教…

java接口概述

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java 接口概念 &#xff1b; 0.2&#xff09;接口技术&#xff1a; 这种技术主要用来描述类具有什么功能&#xff0c; 并不给出每个功能的具体实现&#xff1b; 一个类可以实现多…

通过aws部署推荐系统_通过AWS Elastic Beanstalk轻松进行Spring Boot部署

通过aws部署推荐系统朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户&#xff1f; 立即尝试Okta的API和Java SDK。 数分钟之内即可在任何应用程序中对用户进行身份验证&#xff0c;管理和保护。 几乎所有应用程序都依赖于身份验证。 开发人员以及雇用他们的公司都想确认…

图论算法基础

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 旨在复习数据结构中图论算法的基础知识&#xff1b; 【1】图论若干相关定义 1.1&#xff09;图G定义&#xff1a;一个图G&#xff08;V&#xff0c;E&#xff09;由顶点及集V 和 边集E组成&#xff0c…

mysql 表丢失_Mysql数据库备份 部分数据表丢失 Mysql table doesn't exist 解决

问题&#xff1a;直接拷贝data下的数据库数据进行备份&#xff0c;重装升级了数据库&#xff0c;直接复制备份数据到新的数据库data目录下&#xff0c;发现部分数据表不见了。原因分析&#xff1a;以表“Table”为例:如类型是MyISAM, 数据文件则以”Table.frm”&#xff0c;”T…

aws 删除ec2实例_如何在AWS EC2实例上部署Spring Boot应用程序

aws 删除ec2实例你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何在AWS EC2实例上部署Spring Boot应用程序。 这是我们将要执行的步骤。 1.使用Spring Boot Initialiser创建一个Spring Boot项目。 2.创建一个休息端点&#xff0c;部署后我们可以访问 3.启动EC2…

jdbc操作mysql数据库_JDBC操作MySQL数据库(一)

连接MySQL数据库连接数据源有两种方式&#xff1a;1)通过DriverManager类2)通过DataSource接口及JNDI资源获得连接DriverManager类的路径为java.sql.DriverManager&#xff0c;它主要完成驱动程序的装载和建立新的数据库连接。其常用方法如下&#xff1a;* getConnection (Stri…