Flutter (Retrofit + Dio) - 3 - Retrofit方式使用dio

该教程介绍了如何在Flutter项目中基于Dio和Retrofit库创建实体类,封装网络请求API。首先,过了一遍Flutter官方文档,然后通过@RestApi注解创建DouyinApi接口,定义GET请求获取Douyin用户数据。接着,在HomePageEntrance页面中实例化并调用这些API,获取并打印用户列表的总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议先将Flutter官方文档过一遍,本系列教程 Flutter SDK >= 3.10.0

考虑篇幅长度,这里将分成几片文章

  1. 创建实体类
  2. 封装dio
  3. Retrofit方式使用dio

一、创建基础请求API

lib/api/douyin.dart

import 'package:dio/dio.dart';
import 'package:lhdht_flutter_app/model/request/douyin_user_request_entity.dart';
import 'package:lhdht_flutter_app/model/entity/douyin_user_entity.dart';
import 'package:lhdht_flutter_app/model/response/list_response_entity.dart';
import 'package:retrofit/retrofit.dart';

part 'douyin.g.dart';

()
abstract class DouyinApi {
  factory DouyinApi(Dio dio) => _DouyinApi(dio);
  
  ("/v1/ext/douyin/user")
  Future<ListResponseEntity<DouyinUserEntity>> getUser(
      () DouyinUserRequestEntity douyinUserRequestEntity);
}

通过 flutter pub run build_runner build 生成实体类方法

二、使用

lib/pages/home/entrance.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:lhdht_flutter_app/api/douyin.dart';
import 'package:lhdht_flutter_app/components/bottom_navigation/entrance.dart';
import 'package:lhdht_flutter_app/model/request/douyin_user_request_entity.dart';
import 'package:lhdht_flutter_app/model/entity/douyin_user_entity.dart';
import 'package:lhdht_flutter_app/utils/http/entrance.dart';
import 'package:lhdht_flutter_app/utils/system/theme.dart';

class HomePageEntrance extends StatefulWidget {
  const HomePageEntrance({super.key});

  
  State<HomePageEntrance> createState() => HomePage();
}
class HomePage extends State<HomePageEntrance> {
  final DouyinApi _douyinApi = DouyinApi(Http.instance.dio); // 实例化

  int douyinUserTotal = 0; 
  DouyinUserRequestEntity douyinUserQuery = DouyinUserRequestEntity();
  List<DouyinUserEntity> douyinUserList = [];

  
  void initState() {
     _getDouyinUserList();
    super.initState();
  }

  void _getDouyinUserList() async {
    var res = await _douyinApi.getUser(douyinUserQuery);
    print(res.total);
  }

  
  Widget build(BuildContext context) {
    var systemTheme = SystemTheme(context: context);

    return Scaffold(
      appBar: AppBar(
        title: Text(
          "首页",
          style: TextStyle(
            color: systemTheme.dynamicTheme(Colors.white, Colors.black87),
          ),
        ),
        systemOverlayStyle: SystemUiOverlayStyle(
          statusBarIconBrightness: systemTheme.dynamicTheme(Brightness.light, Brightness.dark),
        ),
        backgroundColor: Colors.transparent,
        shadowColor: Colors.black12,
        // elevation: 0, // 底部阴影

        flexibleSpace: Image(
          image: AssetImage(systemTheme.dynamicTheme('lib/assets/images/dark_background.jpg', 'lib/assets/images/light_background.jpg')),
          fit: BoxFit.cover,
        ),
      ),
      body: const Center(
        child: Text("home"),
      ),
      bottomNavigationBar: EntranceBottomNavigation(page: "/home"),
    );
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梨花炖海棠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值