华为云开发者联盟 flutter网络请求框架Dio简单使用

flutter网络请求框架Dio简单使用

flutter网络请求框架Dio简单使用问题背景在Flutter中,目前比较流行的网络请求框架是Dio,是Flutter中文网推出的。本文主要是讲解如何简单使用Dio的get请求来获取数据,并使用Flutter中的listview进行展示。问题分析(1)添加对应依赖在pubspec.yaml文件中的depende...

flutter网络请求框架Dio简单使用

问题背景

在Flutter中,目前比较流行的网络请求框架是Dio,是Flutter中文网推出的。本文主要是讲解如何简单使用Dio的get请求来获取数据,并使用Flutter中的listview进行展示。

问题分析

(1)添加对应依赖 在pubspec.yaml文件中的dependencies标签下面写即可,代码如下:

environment:
  sdk: ">=2.10.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.4
  flutter_swiper: 1.1.6
  ......
  # 增加dio依赖框架
  dio: ^5.1.1

(2)get获取网络请求数据 这我们使用简单的get请求方式来获取数据,接口的话我们使用郭霖提供的API接口http://guolin.tech/api/china,我们可以使用浏览器直接访问,来看看获取的数据,如下图所示: image.png (3)实体类创建 这里推荐使用个插件JsonToDart,插件市场直接安装即可,如图所示: image.png 安装好插件后,我们要使用的话,可以右键,然后悬着具体菜单即可新建即可,这里我是建了个model文件夹,右键model文件夹, New -> Json To Dart image.png 把json字符串输入进去,输入类名,之后点击Generate即可生成一个dart的实体类文件。

问题解决

上节初步分析了基本环节,本节直接上代码。 (1)新建的json对应的dart实体类代码如下:

class CityModel {
  CityModel({
      this.id, 
      this.name,});

  CityModel.fromJson(dynamic json) {
    id = json['id'];
    name = json['name'];
  }
  int id;
  String name;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['id'] = id;
    map['name'] = name;
    return map;
  }

}

(2)界面文件代码如下:

import 'dart:convert';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

import 'model/CityModel.dart';

class Test extends StatefulWidget {
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  List list = [];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('list page'),
        ),
        body: _listView(),
      ),
      theme: ThemeData(
        primarySwatch: Colors.yellow,
      ),
    );
  }

  @override
  void initState() {
    getCityData();
  }

  void getCityData() async {
    var dio = Dio();
    Response response = await dio.get('http://guolin.tech/api/china',
        options: Options(responseType: ResponseType.plain));
    var list = jsonDecode(response.data);

    var cityList =
    list.map((m) => new CityModel.fromJson(m)).toList();
    setState(() {
      this.list.addAll(cityList);
    });
  }

  /// 列表组件
  Widget _listView() {
    return new ListView.builder(
      // listview的子项item数量
      itemCount: list.length,
      // 内边距
      padding: new EdgeInsets.all(5.0),
      itemBuilder: (BuildContext context, int index) {
        // 返回每个子项item的widget
        // 城市名
        return _listItemView(list[index].name);
      },
    );
  }

  /// 定义列表的每个item布局
  Widget _listItemView(String name) {
    return Row(
      children: [
        Center(
          child: Text(name),
        ),
      ],
    );
  }
}

(3)运行结果如下: image.png

问题总结

本文初步讲解如何简单使用Dio的get请求来获取数据,并使用Flutter中的listview进行展示,有兴趣的同学可以进一步深入研究。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐

  • 浏览量 553
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献7条内容