Flutter网络操作插件http_actions的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter网络操作插件http_actions的使用

http_actions 是一个用于Dart/Flutter的HTTP网络包,支持全局配置、拦截器、表单数据、文件上传下载、超时、缓存数据等功能。

为什么使用这个包?

这是一个功能强大的Flutter包,用于进行HTTP请求,并支持拦截器和动态配置的缓存。这使得你可以更灵活地处理网络通信需求。

拦截器

拦截器是我们Flutter包的一个强大功能,允许你在发送或接收HTTP请求和响应之前对其进行拦截和修改。通过拦截器,你可以添加认证令牌、修改头部信息、记录请求,甚至实现缓存策略。无论你需要增强安全性、优化网络性能还是自定义请求处理,我们包的拦截器都为你提供了灵活且方便的解决方案。

缓存

我们的Flutter包超越了传统的HTTP请求处理,提供了一个无缝的缓存数据流。通过这个缓存数据流,你可以轻松存储和检索HTTP响应,优雅地处理离线场景。我们的包的缓存数据流为你的Flutter应用提供了更流畅的用户体验。

开始使用

添加依赖

你可以使用以下命令将http_actions作为依赖项添加到项目中:

$ dart pub add http_actions

或者,你可以在pubspec.yaml文件的dependencies部分手动添加:

dependencies:
  http_actions: ^replace-with-latest-version
简单使用
import 'package:http_actions/http_actions.dart';

HttpActions httpActions = HttpActions();

void getHttp() async {
  final response = await httpActions.get('https://dart.dev');
  print(response);
}

示例

发送GET请求
import 'package:http_actions/http_actions.dart';

final HttpActions httpActions = HttpActions();

void request() async {
  HttpBaseResponse response;
  response = await httpActions.get('/somePath?id=15&name=something');
  print(response.data.toString());

  // 与上述请求相同
  response = await httpActions.get(
    '/somePath',
    queryParameters: {'id': 15, 'name': 'something'},
  );
  print(response.data.toString());
}
发送POST请求
response = await httpActions.post('/somePath', data: {'id': 15, 'name': 'something'});
发送PATCH请求
response = await httpActions.patch('/somePath', data: {'id': 15, 'name': 'something'});
发送PUT请求
response = await httpActions.put('/somePath', data: {'id': 15, 'name': 'something'});
发送DELETE请求
response = await httpActions.delete('/somePath', data: {'id': 15, 'name': 'something'});
使用Multipart请求上传多个文件到服务器
final Map<String, dynamic> formData = {
  'name': 'http_actions',
  'date': DateTime.now().toString(),
  'file': await MultipartFile.fromPath(file: "file", filePath: "filePath"),
};

final response = await httpActions.post('/somePath', data: formData);
使用拦截器
final HttpActions httpActions = HttpActions();
httpActions.interceptorsWrapper = InterceptorsWrapper(
  onRequest: (options) async {
    // 在请求发送前执行的操作。
    // 如果你想在头部传递授权令牌,可以这样做:
    options.headers = {"Authorization": "token"};
    // 如果你想为特定端点缓存数据,可以在这里使用options参数:
    options.cacheData = false;
    return options;
  },
  onResponse: (response) async {
    // 对响应数据进行操作。
    // 如果你想解析请求或继续调用请求,可以这样做:
    response.resolveType = ResolveType.doResolve;
    return response;
  },
);

final response = await httpActions.post('/somePath', data: formData);
创建HTTP实例
class HttpInstance with HttpActionMixin implements HttpActions {
  HttpInstance._([HttpBaseOptions? options]) {
    options = HttpBaseOptions(
      baseUrl: "",
      showlogs: false,
      cacheData: true,
      // 为所有请求传递通用头部信息
      headers: {},
      // 添加请求超时时间
      timeOut: const Duration(minutes: 5),
    );
    this.options = options;
    interceptorsWrapper = InterceptorsWrapper(
      onRequest: (options) async {
        options.cacheData = false;
        // 如果你想为特定请求传递特定头部信息,则应该设置options.headers。
        options.headers = {
          "Authorization": ""
        };
        return options;
      },
      onResponse: (response) async {
        response.resolveType = ResolveType.doResolve;
        return response;
      },
    );
  }

  static HttpActions getInstance() => HttpInstance._();
}

final HttpActions httpActions = HttpInstance.getInstance();
httpActions.get("/somePath");

完整示例代码

example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:http_actions_example/screens/product/products_page.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // await HttpHiveService().init();
  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(
        primarySwatch: Colors.blue,
      ),
      home: const ProductsPage(),
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter网络操作插件http_actions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络操作插件http_actions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用http_actions插件进行网络操作的代码示例。http_actions是一个用于简化HTTP请求的Flutter插件,它提供了便捷的接口来处理GET、POST等HTTP请求。

首先,确保你已经在pubspec.yaml文件中添加了http_actions依赖:

dependencies:
  flutter:
    sdk: flutter
  http_actions: ^x.y.z  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用http_actions进行网络操作:

  1. 导入http_actions
import 'package:http_actions/http_actions.dart';
  1. 配置HTTP客户端(可选,但推荐):

你可以通过配置HttpClient来自定义请求头、超时等设置。

final httpClient = HttpClient(
  baseUrl: 'https://api.example.com', // 基础URL
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_TOKEN', // 替换为你的实际令牌
  },
  timeout: Duration(seconds: 30), // 请求超时时间
);
  1. 进行GET请求
void fetchData() async {
  try {
    final response = await httpClient.get('/endpoint'); // 替换为你的实际端点
    if (response.isSuccessful) {
      final data = await response.json();
      print('Data received: $data');
    } else {
      print('Request failed with status: ${response.statusCode}');
    }
  } catch (e) {
    print('An error occurred: $e');
  }
}
  1. 进行POST请求
void sendData() async {
  final body = {
    'key1': 'value1',
    'key2': 'value2',
  };

  try {
    final response = await httpClient.post('/endpoint', body: body); // 替换为你的实际端点
    if (response.isSuccessful) {
      final data = await response.json();
      print('Data sent and received: $data');
    } else {
      print('Request failed with status: ${response.statusCode}');
    }
  } catch (e) {
    print('An error occurred: $e');
  }
}
  1. 在UI中调用这些函数(例如,在按钮点击事件中):
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter HTTP Actions Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: fetchData,
                child: Text('Fetch Data'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: sendData,
                child: Text('Send Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

以上代码展示了如何使用http_actions插件在Flutter中进行基本的GET和POST网络请求。请根据你的实际需求调整URL、请求头和请求体。同时,记得处理网络请求中的错误和异常情况,以确保应用的健壮性。

回到顶部