建议先将Flutter官方文档过一遍,本系列教程 Flutter SDK >= 3.10.0
考虑篇幅长度,这里将分成几片文章
一、创建基础请求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"),
);
}
}