Flutter API封装插件api_wrap的使用

Api Wrap #

Package Thumbnail

重要

此包正处于早期API设计阶段。


开发中文档 🏗️

为了支持其开发,您可以在GitHub上点赞并收藏它。


贡献者 ✨ #

任何类型的贡献都欢迎!

Alt

活动 #

Alt

```

example/lib/main.dart

import 'package:example/src/buttons/debounce_button.dart';
import 'package:example/src/buttons/error_button.dart';
import 'package:example/src/buttons/retry_button.dart';
import 'package:example/src/buttons/success_button.dart';
import 'package:example/src/buttons/throttle_button.dart';
import 'package:flutter/material.dart';
import 'package:toastification/toastification.dart';

void main() { runApp(const MyApp()); }

class MyApp extends StatelessWidget { const MyApp({super.key});

@override Widget build(BuildContext context) { // 使用ToastificationWrapper包装应用,以显示Toastification消息 return ToastificationWrapper( config: const ToastificationConfig( alignment: Alignment.bottomCenter, animationDuration: Duration( milliseconds: 300, ), ), child: MaterialApp( title: ‘ApiWrap Demo’, theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(), ), ); } }

class MyHomePage extends StatelessWidget { const MyHomePage({super.key});

@override Widget build(BuildContext context) { // 创建一个包含不同按钮的列表 final buttons = [ const SuccessButton(), const ErrorButton(), const DebounceButton(), const ThrottleButton(), const RetryButton(), ];

// 返回一个Scaffold,包含一个AppBar和一个ListView
return Scaffold(
  appBar: AppBar(
    // 设置AppBar背景颜色为当前主题的逆主色
    backgroundColor: Theme.of(context).colorScheme.inversePrimary,
    title: const Text('ApiWrap Example'),
  ),
  body: SingleChildScrollView(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        // 创建一个ListView.builder来展示每个按钮
        ListView.builder(
          primary: false,
          shrinkWrap: true,
          padding: const EdgeInsets.symmetric(horizontal: 20),
          itemCount: buttons.length,
          itemBuilder: (_, index) {
            // 计算垂直间距
            final gap = MediaQuery.sizeOf(context).height / 2;

            return Padding(
              padding: EdgeInsets.symmetric(vertical: gap),
              child: buttons[index], // 显示当前按钮
            );
          },
        )
      ],
    ),
  ),
);

} }


更多关于Flutter API封装插件api_wrap的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter API封装插件api_wrap的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


api_wrap 是一个用于 Flutter 的 API 封装插件,旨在简化 API 请求的处理,并提供更好的代码组织和可维护性。通过 api_wrap,你可以将 API 请求、响应处理和错误管理封装在一个统一的接口中,从而减少代码重复并提高开发效率。

安装 api_wrap

首先,你需要在 pubspec.yaml 文件中添加 api_wrap 依赖:

dependencies:
  flutter:
    sdk: flutter
  api_wrap: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用 api_wrap

1. 创建 API 服务类

你可以创建一个 API 服务类来封装所有的 API 请求。例如:

import 'package:api_wrap/api_wrap.dart';

class ApiService {
  final ApiWrap _apiWrap = ApiWrap(baseUrl: 'https://api.example.com');

  Future<dynamic> fetchUserData(int userId) async {
    return await _apiWrap.get('/users/$userId');
  }

  Future<dynamic> postUserData(Map<String, dynamic> data) async {
    return await _apiWrap.post('/users', data: data);
  }
}

2. 使用 API 服务类

在你的 Flutter 应用中,你可以像这样使用 ApiService 类来发起 API 请求:

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

class MyApp extends StatelessWidget {
  final ApiService _apiService = ApiService();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('API Wrap Example'),
        ),
        body: Center(
          child: FutureBuilder(
            future: _apiService.fetchUserData(1),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text('User Data: ${snapshot.data}');
              }
            },
          ),
        ),
      ),
    );
  }
}

void main() => runApp(MyApp());

3. 处理错误

api_wrap 提供了内置的错误处理机制。你可以通过 onError 回调来处理 API 请求中的错误:

class ApiService {
  final ApiWrap _apiWrap = ApiWrap(
    baseUrl: 'https://api.example.com',
    onError: (error) {
      // 在这里处理错误
      print('API Error: $error');
    },
  );

  Future<dynamic> fetchUserData(int userId) async {
    return await _apiWrap.get('/users/$userId');
  }
}

4. 配置请求头

你可以通过 headers 参数来配置请求头:

class ApiService {
  final ApiWrap _apiWrap = ApiWrap(
    baseUrl: 'https://api.example.com',
    headers: {
      'Authorization': 'Bearer your_token_here',
    },
  );

  Future<dynamic> fetchUserData(int userId) async {
    return await _apiWrap.get('/users/$userId');
  }
}

5. 使用拦截器

api_wrap 还支持请求和响应拦截器,你可以在请求发送前或响应接收后进行一些处理:

class ApiService {
  final ApiWrap _apiWrap = ApiWrap(
    baseUrl: 'https://api.example.com',
    interceptors: [
      (request) {
        // 在请求发送前处理
        print('Sending request: ${request.url}');
        return request;
      },
      (response) {
        // 在响应接收后处理
        print('Received response: ${response.statusCode}');
        return response;
      },
    ],
  );

  Future<dynamic> fetchUserData(int userId) async {
    return await _apiWrap.get('/users/$userId');
  }
}
回到顶部