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

flutter调用api_如何在Flutter(REST API)中进行API调用相关推荐

  1. flutter 序列化_如何在Flutter中序列化对象

    flutter 序列化 If you intend to save user data to the shared preferences or local storage in your Flutt ...

  2. linux sip 桥接,linux – 如何在FreeSWITCH pbx软件中关闭SIP调用的RTP缓冲?

    我想在freeswitch pbx软件中关闭SIP调用的缓冲. Freeswitch在缓冲区中保存来自客户端的RTP数据,并每隔20ms发送一次. 我希望freeswitch能够在没有保持的情况下通过 ...

  3. python调用so库输出传入指针_python中使用ctypes调用so传参设置遇到的问题及解决方法...

    问题 近日在做一组声纹聚类时,使用了另一团队同学开发的声纹距离算法.该算法对外提供的是一组so包,需要使用方自己去使用.在python中调用纯so包一般使用ctypes类库,用起来看起来简单但也有不少 ...

  4. 如何在 ASP.NET Core 中使用 API 分析器

    ASP.NET Core 2.2 引入了 API 分析器,它有利于提高 API 的文档化,API分析器 可以应用在任何带有 ApiController 特性的 Controller 上,本篇就和大家一 ...

  5. php 两个类 相互调用_如何在 PHP 和 Laravel 中使用 Traits

    事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承.这意味着一个类只能从另一个类中继承.例如,可能希望从几个不同的类继承方法,以防止代码重复.在 PHP 5.4 中 一个新的语言特性 ...

  6. gmail附件调用_如何在Android版Gmail中添加附件

    gmail附件调用 If you don't use email as part of your day to day life, it can easily be one of those thin ...

  7. python如何调用cpp文件的接口函数_C++中嵌入Python调用

    python嵌入到C++中 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加"Python.h"头文 ...

  8. java调用javascript函数_使用Java程序中的参数调用Javascript函数

    我有Java Swing应用程序.当用户点击MenuItem时,我想使用JavaScript在HTML页面上显示图形. Java代码: if(e.getActionCommand().equals(& ...

  9. python调用函数怎么错_在Python中从类调用函数时参数数目错误

    我试图用python编写一个遗传算法的实现.上面写着我用两个参数来调用它,而只有一个是允许的,但我肯定我不允许.在 以下是相关代码:class GA: def __init__(self, best, ...

最新文章

  1. [JAVAEE] Thymeleaf 基本语法: 迭代循环
  2. LeetCode实战:三数之和
  3. Nginx配置proxy_pass转发的/路径问题
  4. nvm卸载node_nvm-node版本管理工具
  5. rsync+inotify实现服务器之间文件实时同步--转
  6. 同一个项目相互调接口_超详细——接口测试总结与分享(一)
  7. linux硬盘检测工具,CrazyDiskInfo 硬盘检测工具 Linux版 | 厘米天空
  8. java实现打印等腰三角形
  9. 高德地图车道级导航适配OPPO Find N折叠屏手机
  10. 计算机设备管理规定是什么,计算机设备管理制度
  11. centos时间同步方案
  12. hazelcast 搭建_Hazelcast 配置教程
  13. 直播设备之技术分享:全NDI 和NDI |HX
  14. Python中如何计算时间差
  15. zookeeper(五)集群角色epoch的选取
  16. html5border设置彩色,css中border颜色不同怎么设置?
  17. js按下回车键调用方法
  18. Java Fx 使用详解
  19. matlab中矩阵的表示与简单操作
  20. 用 Signal Processing Toolbox 软件对数据进行滤波

热门文章

  1. Coding Contest HDU - 5988
  2. Knowledge is Power Gym - 102822K
  3. Max Sum Plus Plus HDU - 1024
  4. JavaWeb --第三章 HTTP协议详解
  5. Fake Maxpooling(2020多校第二场F)
  6. 染色(树链剖分 洛谷-P2486)
  7. AT2070-[ARC061D]3人でカードゲーム/Card Game for Three【计数,组合数学】
  8. P3188-[HNOI2007]梦幻岛宝珠【背包】
  9. nssl1256-C(盟主的忧虑)【并查集】
  10. ssl1747-登山机器人【离散化,玄学,贪心】