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

建议先将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"),
    );
  }
}

你可能感兴趣的:(flutter,flutter)