Flutter网络请求插件tang_network的使用

Flutter网络请求插件tang_network的使用

tang_network 是一个用于HTTP网络请求的工具,具备以下功能:

  • GET 请求
  • POST 请求
  • 文件上传
  • 文件下载
  • 抽象配置支持

安装

pubspec.yaml 文件中添加依赖:

dependencies:
  tang_network: ^0.0.1

然后运行 flutter pub get 来安装该库。

使用

配置

首先需要实现一些配置类,这些类用于自定义网络请求的行为。例如:

/// Configuration.
class MainConfigNetworkHttp implements NetworkHttpConfig { /* 实现配置逻辑 */ }

/// Base.
class MainConfigNetworkHttpBase implements NetworkHttpBase { /* 实现基础配置逻辑 */ }

/// Keys.
class MainConfigNetworkHttpKeys implements NetworkHttpKeys { /* 实现键值逻辑 */ }

/// Codes.
class MainConfigNetworkHttpCodes implements NetworkHttpCodes { /* 实现状态码逻辑 */ }

/// Getters.
class MainConfigNetworkHttpGetters implements NetworkHttpGetters { /* 实现获取器逻辑 */ }

/// Callbacks.
class MainConfigNetworkHttpCallbacks implements NetworkHttpCallbacks { /* 实现回调逻辑 */ }
初始化

在应用启动时调用 setup() 方法进行初始化:

await NetworkHttp.shared.setup(config: MainConfigNetworkHttp());

可选步骤:如果需要收集设备信息,则在用户同意后调用 setupDeviceInfo() 方法:

onPrivacyPolicyConfirmed: () async {
  await NetworkHttp.shared.setupDeviceInfo();
}
发送请求

创建一个API类,并调用 NetworkHttp 的API发送请求:

final response = await NetworkHttp.shared.request('/api-service/module/method',
  {
    'param1': 1,
    'param2': '2',
  },
  method: NetworkMethodType.post,
).then((resp) => NetworkRespModel.fromJson(resp));
return response;

完整示例

下面是一个完整的示例代码,展示了如何使用 tang_network 插件发送网络请求。

import 'package:example/tang_network_example_api.dart';
import 'package:example/tang_network_example_config.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:tang_network/http/tang_network_http.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await NetworkHttp.shared.setup(config: ExampleConfigNetworkHttp());
  await NetworkHttp.shared.setupDeviceInfo();
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Demo'),
    );
  }
}

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> {
  final _exampleApi = NetworkExampleApi();
  String? _response;

  void _doRequest() async {
    final response = await _exampleApi.getJson('param1', 'param2');
    setState(() {
      _response = response;
    });
    if (kDebugMode) {
      print('The response of HTTP request is: $response');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              _response == null
                  ? 'Please click the add button to send a request.'
                  : 'You have sent a HTTP request,',
            ),
            Text(
              'the response is: ${_response ?? '...'}',
              style: Theme.of(context).textTheme.headlineMedium,
              maxLines: 888,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _doRequest,
        tooltip: 'Send',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


在Flutter项目中,使用第三方插件进行网络请求是一个常见的需求。tang_network 是一个用于Flutter的网络请求插件,它封装了一些常用的网络请求功能,简化了网络请求的处理流程。以下是一个使用 tang_network 插件的示例代码,展示了如何进行GET和POST请求。

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

dependencies:
  flutter:
    sdk: flutter
  tang_network: ^最新版本号 # 请替换为实际可用的最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中使用 tang_network 插件。以下是一个示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final TangNetwork _network = TangNetwork();
  String _responseData = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tang Network Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Response Data:'),
            Text(_responseData, style: TextStyle(fontSize: 18)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _makeGetRequest,
              child: Text('Make GET Request'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _makePostRequest,
              child: Text('Make POST Request'),
            ),
          ],
        ),
      ),
    );
  }

  void _makeGetRequest() async {
    var response = await _network.get(
      url: 'https://api.example.com/data', // 替换为实际的API URL
      params: {'key1': 'value1', 'key2': 'value2'}, // 可选的查询参数
    );

    if (response.isSuccess) {
      setState(() {
        _responseData = response.data.toString();
      });
    } else {
      setState(() {
        _responseData = 'Error: ${response.message ?? 'Unknown Error'}';
      });
    }
  }

  void _makePostRequest() async {
    var response = await _network.post(
      url: 'https://api.example.com/submit', // 替换为实际的API URL
      data: {'key1': 'value1', 'key2': 'value2'}, // 请求体数据
    );

    if (response.isSuccess) {
      setState(() {
        _responseData = response.data.toString();
      });
    } else {
      setState(() {
        _responseData = 'Error: ${response.message ?? 'Unknown Error'}';
      });
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个文本显示区域和两个按钮,分别用于发起GET和POST请求。TangNetwork 实例被用来处理这些请求,并通过回调更新UI来显示响应数据或错误信息。

请注意,你需要根据实际的API URL和请求参数替换示例代码中的URL和参数。此外,TangNetwork 的具体API可能有所不同,请参考其官方文档以获取最新的使用方法和参数说明。

由于我无法直接访问最新的 tang_network 插件文档和源码,上述代码基于插件通常的使用方式进行了假设。如果 tang_network 的API有所变化,请根据实际情况进行调整。

回到顶部