Flutter网络服务插件flutter_network_service的使用

Flutter网络服务插件flutter_network_service的使用

🎖 安装

  1. 首先,打开你的 pubspec.yaml 文件并添加依赖:
    flutter_network_service:
    
  2. 运行 flutter pub get 来更新包的依赖。

⚡️ 导入

  1. 在你的代码中使用它。首先导入该包:
    import 'package:flutter_network_service/HttpNetworkService.dart';
    

🎮 代码使用

然后在你的代码中这样使用:

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutternetworkservicehandler/src/http_network_service.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List _usersList = [];

  var errorMessage = 'Can\'t proceed request';

  void _showErrorDialog(String message) {
    showDialog(
      context: context,
      builder: (ctx) => AlertDialog(
        title: Text('Error Occured'),
        content: Text(message),
        actions: <Widget>[
          ElevatedButton(
            onPressed: () {
              Navigator.of(ctx).pop();
            },
            child: Text('OK!'),
          )
        ],
      ),
    );
  }

  Future getUsersData() async {
    try {
      // 初始化HttpNetwork服务
      await HttpNetworkService.init(
        baseUrl: 'https://jsonplaceholder.typicode.com',
      );
      // 然后这样使用
      final responseUsersList = await HttpNetworkService.getRequest(
        uri: '/users', // 注意这里的uri应该是正确的路径
        // 选项从dio包中导入。
        options: Options(headers: {
          "Content-Type": "application/json",
        }),
      );
      for (var items in responseUsersList) {
        print(items);
        _usersList.add({
          'id': items['id'],
          'username': items['username'],
          'website': items['website'],
        });
      }
    } catch (error) {
      errorMessage = error.toString();
      _showErrorDialog(
        errorMessage,
      );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: getUsersData(),
        builder: (ctx, snapshot) =>
            snapshot.connectionState == ConnectionState.waiting
                ? Center(
                    child: CircularProgressIndicator(),
                  )
                : snapshot.data == null
                    ? Center(
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Icon(
                              Icons.error,
                              size: 75,
                              color: Colors.red,
                            ),
                            Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: Text(
                                errorMessage.toUpperCase(),
                                textAlign: TextAlign.center,
                                style: TextStyle(
                                  fontSize: 16.0,
                                  fontWeight: FontWeight.w700,
                                ),
                              ),
                            ),
                          ],
                        ),
                      )
                    : ListView.builder(
                        itemCount: _usersList.length,
                        itemBuilder: (ctx, i) => ListTile(
                          title: Text(_usersList[i]['username']),
                          subtitle: Text(_usersList[i]['website']),
                          leading: CircleAvatar(
                            child: FittedBox(
                              child: Text(
                                _usersList[i]['id'].toString(),
                              ),
                            ),
                          ),
                          trailing: Icon(
                            Icons.arrow_forward_ios,
                          ),
                        ),
                      ),
      ),
    );
  }
}

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

1 回复

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


flutter_network_service 是一个用于简化 Flutter 应用中网络请求的插件。它提供了一种简单的方式来执行 HTTP 请求,并处理响应。以下是如何使用 flutter_network_service 插件的步骤:

1. 添加依赖

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

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

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

2. 导入插件

在你的 Dart 文件中导入 flutter_network_service 插件:

import 'package:flutter_network_service/flutter_network_service.dart';

3. 初始化网络服务

你可以通过创建一个 NetworkService 实例来初始化网络服务:

final networkService = NetworkService();

4. 发送 GET 请求

使用 get 方法来发送 GET 请求:

Future<void> fetchData() async {
  final url = 'https://jsonplaceholder.typicode.com/posts';
  final response = await networkService.get(url);

  if (response.statusCode == 200) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

5. 发送 POST 请求

使用 post 方法来发送 POST 请求:

Future<void> postData() async {
  final url = 'https://jsonplaceholder.typicode.com/posts';
  final body = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1,
  };

  final response = await networkService.post(url, body: body);

  if (response.statusCode == 201) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

6. 处理错误

你可以使用 try-catch 块来处理可能发生的错误:

Future<void> fetchDataWithErrorHandling() async {
  final url = 'https://jsonplaceholder.typicode.com/posts';

  try {
    final response = await networkService.get(url);

    if (response.statusCode == 200) {
      print('Response data: ${response.body}');
    } else {
      print('Request failed with status: ${response.statusCode}');
    }
  } catch (e) {
    print('Error: $e');
  }
}

7. 自定义请求头

你可以通过 headers 参数来添加自定义请求头:

Future<void> fetchDataWithCustomHeaders() async {
  final url = 'https://jsonplaceholder.typicode.com/posts';
  final headers = {
    'Authorization': 'Bearer your_token',
    'Content-Type': 'application/json',
  };

  final response = await networkService.get(url, headers: headers);

  if (response.statusCode == 200) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

8. 设置超时

你可以通过 timeout 参数来设置请求超时时间:

Future<void> fetchDataWithTimeout() async {
  final url = 'https://jsonplaceholder.typicode.com/posts';
  final timeout = Duration(seconds: 5);

  try {
    final response = await networkService.get(url, timeout: timeout);

    if (response.statusCode == 200) {
      print('Response data: ${response.body}');
    } else {
      print('Request failed with status: ${response.statusCode}');
    }
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部