MST
星途 面试题库

面试题:Flutter中异步/await在网络请求稳定性方面的基础应用

在Flutter中,使用`http`库进行网络请求时,如何结合异步/await来处理网络请求,以确保请求过程中界面不会卡顿?请写出关键代码片段,并简要解释每一步的作用。
31.5万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 引入http: 在pubspec.yaml文件中添加http依赖:
    dependencies:
      http: ^0.13.4
    
    然后运行flutter pub get安装依赖。
  2. 关键代码片段
    import 'package:http/http.dart' as http;
    import 'dart:convert';
    
    Future<String> fetchData() async {
      try {
        // 发起网络请求
        final response = await http.get(Uri.parse('https://example.com/api/data'));
        if (response.statusCode == 200) {
          // 将响应数据解析为字符串
          return utf8.decode(response.bodyBytes);
        } else {
          throw Exception('Failed to load data');
        }
      } catch (e) {
        print('Error: $e');
        throw Exception('Network request failed');
      }
    }
    
  3. 代码解释
    • import 'package:http/http.dart' as http;:引入http库,用于发起网络请求。
    • import 'dart:convert';:引入dart:convert库,用于处理数据编码和解码。
    • Future<String> fetchData() async:定义一个异步函数fetchData,返回一个Future<String>,表示这个函数会异步返回一个字符串类型的数据。
    • final response = await http.get(Uri.parse('https://example.com/api/data'));:使用http.get方法发起一个GET请求到指定的URL。await关键字会暂停当前函数的执行,直到这个网络请求完成,这样可以避免阻塞主线程,保证界面不卡顿。
    • if (response.statusCode == 200):检查响应状态码,如果是200,表示请求成功。
    • return utf8.decode(response.bodyBytes);:将响应的字节数据解码为UTF - 8编码的字符串并返回。
    • catch (e):捕获请求过程中可能出现的异常,比如网络连接失败等,并打印错误信息,然后重新抛出异常,让调用者可以处理这个错误。