Flutter网络管理插件network_manager的使用

Flutter网络管理插件network_manager的使用

网络管理器简介

network_manager 是一个基于 dio 的网络管理包,用于轻松管理 REST API。

开始使用

network_manager 包含一些功能,用于简化 POST 和 GET API 的使用。

初始化网络管理器

建议在应用的某个入口点初始化网络管理器。你可以设置基础 URL、超时时间,并定义在每次请求时调用的预设函数:onStartDefaultonEndDefaultonSuccessDefaultonFailedDefault

initializeNetworkManager({String token, @required String baseURL}) {
  NetworkOption.initialize(
      baseUrl: baseURL,
      timeout: 30000,
      token: token,
      headers: {
        'Content-Type': 'application/json',
        "Authorization": "Bearer $token",
      },
      onStartDefault: (req) {
        print("Start"); // 请求开始时打印
      },
      onEndDefault: (req) {
        print("End"); // 请求结束时打印
      },
      onSuccessDefault: (res) {
        print("Success"); // 请求成功时打印
      },
      onFailedDefault: (NetworkResponse res) {
        print("Failed"); // 请求失败时打印
      },
      errorMsgExtractor: (res) {
        return res["Message"] ?? "Unknown Error"; // 错误消息提取器
      },
      successMsgExtractor: (res) {
        return res["Message"] ?? "Done"; // 成功消息提取器
      });
}

每个网络请求返回一个 Future

class NetworkResponse {
  final bool responseStatus;
  final int responseCode;
  final String responseTitle;
  Function retryFunction;
  dynamic responseBody;
  dynamic responseDetails;
  String extractedMessage;

  NetworkResponse(
      {this.responseStatus,
        this.responseCode,
        this.responseTitle,
        this.responseBody,
        this.retryFunction,
        this.responseDetails,
        this.extractedMessage});

  @override
  String toString() {
    return "$responseCode $responseTitle : $extractedMessage"; // 覆盖 toString 方法
  }
}

responseBodybase dio response.data 的 JSON 解码结果。

示例

在你想要发起请求的地方,可以按如下方式操作:

final Map<String,dynamic> req = {
  "Username": "test",
  "Password": "test",
};

NetworkManager networkManager = NetworkManager.instance(
  context: context,
  onSuccess: (context,response) => print("OnSuccessCalled"), // 请求成功回调
  req: req,
  api: Apis.login
);
networkManager.requestPost(); // 发起 POST 请求

使用方法2

建议在应用的某个入口点初始化网络管理器。你可以设置基础 URL、超时时间,并定义在每次请求时调用的预设函数:onStartDefaultonEndDefaultonSuccessDefaultonFailedDefault

initializeNetworkManager() {
  /// 初始化网络管理器
  NetworkManagerMetaData.initialize(
      baseUrl: "http://example.com",
      timeout: 30000,
      token: token,
      headers: {
        'Content-Type': "application/json",
      },
      onStartDefault: () {
        print("Start"); // 请求开始时打印
      },
      onEndDefault: () {
        print("End"); // 请求结束时打印
      },
      onSuccessDefault: () {
        print("Success"); // 请求成功时打印
      },
      onFailedDefault: () {
        print("Failed"); // 请求失败时打印
      },
      successRules: (result) {
        return (result["Status"] ?? -1) > 0; // 成功规则
      },
      tokenExpireRules: (resultJson) {
        return (resultJson["Status"] == -999); // 令牌过期规则
      },
      onTokenExpire: (retryFunction) {
        print("Failed");
        // 可以调用重试函数
      },
      useFancyDialog: true,
      errorMsgExtractor: (result) {
        return result["Message"] ?? "Unknown Error"; // 错误消息提取器
      });
}

示例

在你想要发起请求的地方,可以按如下方式操作:

final Map<String,dynamic> req = {
  "Username": "test",
  "Password": "test",
};

NetworkManager networkManager = NetworkManager.instance(
  context: context,
  onSuccess: (context,response) => print("OnSuccessCalled"), // 请求成功回调
  req: req,
  api: Apis.login
);
networkManager.requestPost(); // 发起 POST 请求

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用network_manager插件的示例代码。请注意,network_manager插件的具体API和功能可能会随着版本的更新而有所变化,因此请参考最新的官方文档以确保准确性。

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

dependencies:
  flutter:
    sdk: flutter
  network_manager: ^最新版本号  # 替换为实际最新版本号

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

接下来,你可以在Flutter项目中使用NetworkManager来管理网络连接状态。以下是一个简单的示例,展示了如何使用NetworkManager来监听网络连接变化:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  NetworkStatus? _networkStatus;

  @override
  void initState() {
    super.initState();
    // 初始化NetworkManager并监听网络连接变化
    NetworkManager.init().then((_) {
      NetworkManager.addListener(_onNetworkStatusChanged);
      // 获取当前的网络状态
      _networkStatus = NetworkManager.instance.status;
      setState(() {});
    });
  }

  @override
  void dispose() {
    // 移除监听器
    NetworkManager.removeListener(_onNetworkStatusChanged);
    super.dispose();
  }

  void _onNetworkStatusChanged(NetworkStatus status) {
    setState(() {
      _networkStatus = status;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('NetworkManager Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Network Status:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Text(
                _networkStatus != null
                    ? _networkStatus!.toString()
                    : 'Loading...',
                style: TextStyle(fontSize: 18),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. initState方法中,我们初始化了NetworkManager并添加了一个监听器_onNetworkStatusChanged,该监听器会在网络连接状态发生变化时被调用。
  2. dispose方法中,我们移除了监听器,以避免内存泄漏。
  3. _onNetworkStatusChanged方法会在网络连接状态变化时更新UI。
  4. build方法中,我们显示当前的网络连接状态。

请注意,这个示例仅展示了基本的网络连接状态监听功能。network_manager插件可能还提供了其他功能,如检查特定域名的可达性等,你可以参考官方文档来获取更多信息。

回到顶部