Flutter数据获取插件simple_fetch的使用
Flutter数据获取插件simple_fetch的使用
simple_fetch
是一个基于 Dio
的封装。它简化了在 Dart/Flutter 中处理模型和 HTTP 请求的复杂性。
开始使用
安装
在 pubspec.yaml
文件中添加 simple_fetch
包。
import 'package:simple_fetch/simple_fetch.dart';
final simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/';
非常简单的使用
testGet() async {
List<Todo?> allProductsData = await simpleFetch.getList<Todo>(
url: apiUrl,
mapper: (json) => Todo?.fromJson(json),
);
}
示例
执行 GET 请求
获取单个对象并将其转换为模型类型
/// 从端点获取单个数据项
void getOneDataItemFromEndpoint() async {
SimpleFetch simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/1';
try {
Todo? productsData = await simpleFetch.get<Todo>(
url: apiUrl,
mapper: (json) => Todo?.fromJson(json),
// transformer: (transform) => transform['data'],
);
print(productsData?.toJson());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
}
获取列表对象并将其转换为模型类型
/// 从端点获取数据列表
void getDataFromEndpoint() async {
SimpleFetch simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/';
try {
List<Todo?> allProductsData = await simpleFetch.getList<Todo>(
url: apiUrl,
mapper: (json) => Todo?.fromJson(json),
);
print(allProductsData.map((e) => e?.toJson()).toList());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
}
执行 POST 请求
如果您的 POST 请求响应是一个单一项目
/// 如果POST请求的响应是一个单独的项目
void postSingleResponse() async {
SimpleFetch simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/1';
try {
Todo? productsData = await simpleFetch.post<Todo>(
url: apiUrl,
data: {'id': 1, 'name': 'hello'},
mapper: (json) => Todo?.fromJson(json),
// transformer: (transform) => transform['data'],
);
print(productsData?.toJson());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
}
如果您的 POST 请求响应是一个项目列表
/// 如果POST请求的响应是一个项目列表
void postMultipleResponse() async {
SimpleFetch simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/';
try {
List<Todo?> allProductsData = await simpleFetch.postList<Todo>(
url: apiUrl,
data: {'id': 2, 'name': 'Hiiii'},
mapper: (json) => Todo?.fromJson(json),
);
print(allProductsData.map((e) => e?.toJson()).toList());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
}
并发执行多个请求
response = await Future.wait([request1, request2]);
转换器
默认情况下,包设计用于简单地检索列表或 JSON 数据。有时你可能希望在将数据转换为对象之前对其进行修改(如删除、添加或过滤)。transformer
参数可以帮助你实现这一点。
例如:
try {
List<Todo?> allProductsData = await simpleFetch.getList<Todo>(
url: apiUrl,
mapper: (json) => Todo?.fromJson(json),
transformer: (transform) => transform['data'],
);
print(allProductsData.map((e) => e?.toJson()).toList());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
示例代码
以下是在 main.dart
文件中的完整示例代码:
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:example/models/todo_model.dart';
import 'package:simple_fetch/simple_fetch.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return const SimpleFetchTestApp();
}
}
class SimpleFetchTestApp extends StatefulWidget {
const SimpleFetchTestApp({super.key});
[@override](/user/override)
State<SimpleFetchTestApp> createState() => _SimpleFetchTestAppState();
}
class _SimpleFetchTestAppState extends State<SimpleFetchTestApp> {
void getDataFromEndpoint() async {
SimpleFetch simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/';
try {
List<Todo?> allProductsData = await simpleFetch.getList<Todo>(
url: apiUrl,
mapper: (json) => Todo?.fromJson(json),
);
print(allProductsData.map((e) => e?.toJson()).toList());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
}
void getOneDataItemFromEndpoint() async {
SimpleFetch simpleFetch = SimpleFetch();
String apiUrl = 'https://jsonplaceholder.typicode.com/todos/1';
try {
Todo? productsData = await simpleFetch.get<Todo>(
url: apiUrl,
mapper: (json) => Todo?.fromJson(json),
// transformer: (transform) => transform['data'],
);
print(productsData?.toJson());
} on SimpleError catch (exception) {
print(exception.message);
} catch (e) {}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
children: [
const SizedBox(
height: 120,
),
Column(
children: [
CupertinoButton(
color: Theme.of(context).primaryColor,
child: const Text("Fetch All..."),
onPressed: () {
getDataFromEndpoint();
}),
const SizedBox(
height: 60,
),
CupertinoButton(
color: Theme.of(context).primaryColor,
child: const Text("Single Fetch..."),
onPressed: () {
getOneDataItemFromEndpoint();
}),
],
)
],
),
);
}
}
更多关于Flutter数据获取插件simple_fetch的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据获取插件simple_fetch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用simple_fetch
插件进行数据获取的示例代码。simple_fetch
插件通常用于简化HTTP请求和处理数据。
首先,你需要在pubspec.yaml
文件中添加simple_fetch
依赖项:
dependencies:
flutter:
sdk: flutter
simple_fetch: ^x.y.z # 请将x.y.z替换为当前最新版本号
然后运行flutter pub get
来安装依赖项。
接下来,在你的Flutter项目中,你可以按照以下步骤使用simple_fetch
进行数据获取:
- 创建数据模型:定义一个数据模型类,用于解析从服务器获取的数据。
import 'dart:convert';
class UserData {
final String name;
final int age;
UserData({required this.name, required this.age});
factory UserData.fromJson(Map<String, dynamic> json) {
return UserData(
name: json['name'] as String,
age: json['age'] as int,
);
}
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
};
}
@override
String toString() {
return jsonEncode(toJson());
}
}
- 创建API服务:使用
simple_fetch
创建API服务类。
import 'package:flutter/material.dart';
import 'package:simple_fetch/simple_fetch.dart';
import 'user_data.dart'; // 导入你创建的数据模型类
class ApiService {
final SimpleFetch fetch = SimpleFetch();
Future<UserData?> getUser(String userId) async {
final response = await fetch.get(
url: 'https://api.example.com/users/$userId', // 替换为你的API端点
parser: (response) {
if (response.statusCode == 200) {
Map<String, dynamic> body = jsonDecode(response.body);
return UserData.fromJson(body);
} else {
throw Exception('Failed to load user');
}
},
);
return response;
}
}
- 在UI中使用API服务:在你的Flutter小部件中使用API服务来获取数据并显示。
import 'package:flutter/material.dart';
import 'api_service.dart'; // 导入你创建的API服务类
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: UserScreen(),
);
}
}
class UserScreen extends StatefulWidget {
@override
_UserScreenState createState() => _UserScreenState();
}
class _UserScreenState extends State<UserScreen> {
UserData? user;
final ApiService apiService = ApiService();
@override
void initState() {
super.initState();
_loadUser();
}
Future<void> _loadUser() async {
try {
user = await apiService.getUser('1'); // 替换为实际的用户ID
} catch (e) {
print(e);
}
if (mounted) {
setState(() {});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('User Data'),
),
body: Center(
child: user == null
? CircularProgressIndicator()
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Name: ${user!.name}'),
Text('Age: ${user!.age}'),
],
),
),
);
}
}
在上面的代码中,我们定义了一个数据模型UserData
,一个API服务类ApiService
,并在UserScreen
小部件中使用这个服务来获取和显示用户数据。
注意:
- 确保你替换了示例中的API端点和用户ID为实际的值。
- 错误处理部分可以根据你的需求进行扩展,比如显示Snackbar或者Dialog。
这样,你就可以在Flutter应用中使用simple_fetch
插件进行数据获取了。