Flutter网络请求插件minimal_http_client的使用

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

Flutter网络请求插件minimal_http_client的使用

A Dart package based on Dio that provides minimal http client to handle HTTP services requests. A minimal http client library for network call

Bitbucket open issues

使用

Example

要使用此包:

  • 将依赖项添加到您的 pubspec.yaml 文件。
dependencies:
  flutter:
    sdk: flutter

  minimal_http_client: ^0.0.3

如何使用 minimal_http_client

1. 在应用程序启动时初始化 DioHttpService

或者您可以将其添加到依赖注入中。

final authInterceptor = AuthInterceptor(
  headerCallback: () => {
    'auth_token': 'Bearer your_jwt_token',
    'seassion_key': 'my_seassion_key',
  },
);
await DioHttpService().init(authInterceptor: authInterceptor);

2. 在 repository 中使用

class YourRepositoryName {
  YourRepositoryName({required this.httpService});

  /// HttpService 是用于发起 HTTP 请求的依赖注入
  final HttpService httpService;

  /// 获取新闻列表的功能
  Future<YourModelClass> fetchData() async {
    try {
      /// 新闻列表的 URL
      final path = '${yourBaseURL}get/news/1';

      /// 发送带有授权头的 GET 请求到指定的 URL
      final _response = await httpService.handleGetRequest(path);

      /// 如果响应状态码在 200 到 300 之间,则将响应数据解析为 YourModelClass 并返回它
      if (_response.statusCode! >= 200 && _response.statusCode! <= 300) {
        final _result = YourModelClass.fromJson(_response.data);
        return _result;
      }
    } 
    /// 捕获 DioError 并抛出带有错误消息的自定义错误
    on DioError catch (e) {
      final _message = e.response?.data?['message'] ?? '';
      throw _message;
    } 
    /// 捕获所有其他异常并抛出自定义错误
    catch (e) {
      throw '$e';
    }
  }
}

创建与维护

Tushar Nikam


完整示例代码

import 'package:flutter/material.dart';
import 'package:minimal_http_client/http_service.dart';

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

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

  // 这个小部件是你的应用的根
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'HTTP Minimal client',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: HomeScreen(httpService: DioHttpService()),
    );
  }
}

class HomeScreen extends StatefulWidget {
  final HttpService httpService;
  const HomeScreen({super.key, required this.httpService});

  [@override](/user/override)
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  [@override](/user/override)
  void initState() {
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      final authInterceptor = AuthInterceptor(
        headerCallback: () => {
          'auth_token': 'Bearer ${DateTime.now().minute}: ${DateTime.now().second}',
          'seassion_key': 'my_seassion_key',
        },
      );
      await DioHttpService().init(authInterceptor: authInterceptor);
    });
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("HTTP Minimal client"),
      ),
      body: Center(
        child: TextButton(
          onPressed: () async {
            final result = await widget.httpService
                .handleGetRequest('https://api.publicapis.org/entries');
            debugPrint("Result: $result");
          },
          child: const Text("Get Info"),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter网络请求插件minimal_http_client的示例代码。这个插件提供了一个简洁的接口来进行HTTP请求。

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

dependencies:
  flutter:
    sdk: flutter
  minimal_http_client: ^0.2.0  # 请检查最新版本号

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

接下来,在你的Flutter项目中,你可以按如下方式使用minimal_http_client来进行HTTP请求。以下是一个完整的示例,包括GET和POST请求的使用。

import 'package:flutter/material.dart';
import 'package:minimal_http_client/minimal_http_client.dart';
import 'dart:convert';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Minimal HttpClient Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? responseData;

  void fetchData() async {
    final client = MinimalHttpClient();

    // GET 请求示例
    try {
      final response = await client.get(
        Uri.parse('https://jsonplaceholder.typicode.com/posts/1'),
      );

      if (response.statusCode == 200) {
        setState(() {
          responseData = response.bodyAsString;
        });
      } else {
        setState(() {
          responseData = 'Error: ${response.statusCode}';
        });
      }
    } catch (e) {
      setState(() {
        responseData = 'Exception: $e';
      });
    }
  }

  void postData() async {
    final client = MinimalHttpClient();

    // POST 请求示例
    final jsonBody = jsonEncode({
      'title': 'foo',
      'body': 'bar',
      'userId': 1,
    });

    try {
      final response = await client.post(
        Uri.parse('https://jsonplaceholder.typicode.com/posts'),
        headers: {
          'Content-Type': 'application/json',
        },
        body: jsonBody,
      );

      if (response.statusCode == 201) {
        setState(() {
          responseData = response.bodyAsString;
        });
      } else {
        setState(() {
          responseData = 'Error: ${response.statusCode}';
        });
      }
    } catch (e) {
      setState(() {
        responseData = 'Exception: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Minimal HttpClient Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: fetchData,
              child: Text('Fetch Data (GET)'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: postData,
              child: Text('Post Data (POST)'),
            ),
            SizedBox(height: 20),
            Text(responseData ?? 'No data'),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个Flutter应用,其中包括两个按钮,一个用于执行GET请求,另一个用于执行POST请求。GET请求从https://jsonplaceholder.typicode.com/posts/1获取数据,POST请求向https://jsonplaceholder.typicode.com/posts发送JSON数据。

注意:

  • MinimalHttpClientgetpost方法返回一个Future<Response>,因此我们需要使用await关键字来等待响应。
  • 响应的状态码可以通过response.statusCode获取。
  • 响应的主体可以通过response.bodyAsString获取为字符串。

希望这个示例能帮助你理解如何使用minimal_http_client进行网络请求。如果你有任何进一步的问题,请随时提问!

回到顶部