flutter:文件操作与网络请求 (十五)

简介: 本文介绍了 Dart 语言中文件操作与网络请求的相关知识,包括 Future 的使用、异步请求的处理以及 async 和 await 的应用。通过示例代码展示了如何实现延时操作、处理网络请求及解析 JSON 数据。

前言

在现代应用程序开发中,文件操作和网络请求是不可或缺的技能,尤其在使用 Dart 语言时。本文将深入探讨 Dart 中与文件操作和网络请求相关的知识,包括 Future 的使用、异步请求的处理以及 async 和 await 的应用。通过具体的示例代码,您将学习如何实现延时操作、发起网络请求以及解析 JSON 数据。这些技能不仅有助于提高您的编程能力,还能在实际项目中有效地优化性能和用户体验。

文件操作与网络请求

Future

延时

void main() {
  getData();
}
Future<bool> getData() async {
  await Future.delayed(Duration(milliseconds: 5000), () {
    //  等 5 秒
    print("after a seconds");
  });
  //  在这个 也要 等
  print(" process done");
  return true;
}
void main() {
  // getData();
  getData2();
}
Future<bool> getData() async {
  await Future.delayed(Duration(milliseconds: 5000), () {
    //  等 5 秒
    print("after a seconds");
  });
  //  在这个 也要 等
  print(" process done");
  return true;
}
Future<bool> getData2() async {
  print("this first test");
  await Future.delayed(Duration(milliseconds: 3000), () {
    print("this second test");
  });
  print("this third test");
  await Future.delayed(Duration(milliseconds: 3000), () {
    print("this fourth test");
  });
  print("this is fifth test");
  return true;
}


异步请求

import 'dart:io';
void main(List<String> args) {
  print("start req..");
  Future<String> future = getNetworkData();
  future
      .then((value) => {print('$value')})
      .catchError((err) => {print('$err')});
  print("end req..");
}
Future<String> getNetworkData() {
  // wait 3 s
  return Future<String>(() {
    sleep(Duration(seconds: 3));
    throw Exception("Network data");
    // return 'i am the result of the request';
  });
}

async 和await

import 'dart:io';
void main(List<String> args) async {
  print("start req..");
  // await 只能在async 里面使用
  //  使用 async  标记的函数 必须返回一个future 对象
  var future = await getNetworkData();
  print(future);
}
Future<String> getNetworkData() {
  // wait 3 s
  return Future<String>(() {
    sleep(Duration(seconds: 3));
    return 'i am the result of the request';
  });
}
void main(List<String> args) {
  getNetworkData().then((value) => print(value));
}
Future<String> getNetworkData() async {
  var result = await Future.delayed(Duration(seconds: 3), () {
    return "network data";
  });
  // wait 3 s 打印
  print("hello world");
  // 这个被调用 打印
  return 'i am the result of the request $result';
}

网络请求

getRequestge

get请求

import 'package:flutter/material.dart';
import 'dart:io';
import 'dart:convert';
class MyTest extends StatefulWidget {
  const MyTest({Key? key}) : super(key: key);
  @override
  State<MyTest> createState() => _MyTestState();
}
class _MyTestState extends State<MyTest> {
  int groupValue = 0;
  bool checkIsSelect = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("title"),
      ),
      body: Center(
        child: Column(
          children: [
          Text("hello,world"),
ElevatedButton(onPressed: (){getRequest();}, child: Text("click me "))
          ],
        ),
      ),
    );
  }
}
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyTest(),
    );
  }
}
void main() {
  getRequest();
  runApp(const MyApp());
}
Future<bool> getData() async {
  await Future.delayed(Duration(milliseconds: 1000), () {
    print("after a seconds");
  });
  print(" process done");
  return true;
}
void getRequest() async {
  String url = 'http://localhost:3000/api/test';
  HttpClient httpClient = new HttpClient();
  String result;
  try {
    Uri uri = Uri.parse(url);
    HttpClientRequest request = await httpClient.getUrl(uri);
    HttpClientResponse response = await request.close();
    if (response.statusCode == HttpStatus.ok) {
      String json = await response.transform(utf8.decoder).join();
      var data = jsonDecode(json);
      result = data.toString();
      print("the get result data is${data.toString()}");
    } else {
      result = 'error ${response.statusCode}';
    }
  } catch (exception) {
    result = 'Failed getting Ip address';
  }
  // setState((){
  //   _netData= result;
  // });
  print(result);
}

hettp

import 'package:flutter/material.dart';
import 'dart:io';
import 'dart:convert';
class MyTest extends StatefulWidget {
  const MyTest({Key? key}) : super(key: key);
  @override
  State<MyTest> createState() => _MyTestState();
}
class _MyTestState extends State<MyTest> {
  int groupValue = 0;
  bool checkIsSelect = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("title"),
      ),
      body: Center(
        child: Column(
          children: [
            Text("hello,world"),
            ElevatedButton(
                onPressed: () {
                  getRequest();
                },
                child: Text("click me "))
          ],
        ),
      ),
    );
  }
}
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyTest(),
    );
  }
}
void main() {
  runApp(const MyApp());
}
void getRequest() async {
  String url = 'http://localhost:3000/api/test';
  HttpClient httpClient = new HttpClient();
  String result;
  try {
    Uri uri = Uri.parse(url);
    HttpClientRequest request = await httpClient.getUrl(uri);
    HttpClientResponse response = await request.close();
    if (response.statusCode == HttpStatus.ok) {
      String json = await response.transform(utf8.decoder).join();
      var data = jsonDecode(json);
      result = data.toString();
      print("the get result data is${data.toString()}");
    } else {
      result = 'error ${response.statusCode}';
    }
  } catch (exception) {
    result = 'Failed getting Ip address';
  }
  // setState((){
  //   _netData= result;
  // });
  print(result);
}
Future<bool> getData() async {
  await Future.delayed(Duration(milliseconds: 1000), () {
    print("after a seconds");
  });
  print(" process done");
  return true;
}


相关文章
|
12月前
|
安全 网络协议 Java
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
65 0
|
2月前
|
缓存
Flutter Image从网络加载图片刷新、强制重新渲染
Flutter Image从网络加载图片刷新、强制重新渲染
79 1
|
5月前
|
Linux
基于 Linux 的文件操作 网络编程的最后一环
Linux下万物皆文件 在了解了客户端和服务器的函数调用之后,我们只需要了解下文件操作就能编写出属于自己的客户端和服务器了,还能让他们进行通信。
39 0
|
5月前
|
存储 XML 前端开发
【Flutter前端技术开发专栏】Flutter中的网络请求与数据处理
【4月更文挑战第30天】本文介绍了Flutter开发中的网络请求和数据处理。 Flutter开发者可选择http(官方库)或dio(功能更强大)进行网络请求。http库简单易用,dio支持更多功能如拦截器。数据处理涉及JSON和XML解析,数据存储可选SharedPreferences或Hive,数据传递推荐使用InheritedWidget或Provider状态管理库。了解这些知识点能提升Flutter开发效率。
134 0
【Flutter前端技术开发专栏】Flutter中的网络请求与数据处理
|
5月前
|
XML JSON 前端开发
【Flutter前端技术开发专栏】Flutter中的图片、视频与网络资源加载
【4月更文挑战第30天】Flutter是谷歌的开源前端框架,因其高性能、流畅UI和多端运行能力受开发者喜爱。本文聚焦于Flutter中的资源加载:使用`Image`组件加载静态、网络和本地图片;通过`video_player`库加载和播放视频;利用`http`包进行网络资源请求。掌握这些技巧将有助于提升Flutter应用的开发效率和质量。
42 0
【Flutter前端技术开发专栏】Flutter中的图片、视频与网络资源加载
|
5月前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求
|
11月前
|
存储 Java API
使用Java NIO进行文件操作、网络通信和多路复用的案例
使用Java NIO进行文件操作、网络通信和多路复用的案例
|
Dart API
带你读《深入浅出Dart》二十九、Flutter网络请求(1)
带你读《深入浅出Dart》二十九、Flutter网络请求(1)
|
XML JSON Dart
带你读《深入浅出Dart》二十九、Flutter网络请求(2)
带你读《深入浅出Dart》二十九、Flutter网络请求(2)
|
XML JSON Dart
《深入浅出Dart》Flutter网络请求
Flutter网络请求 网络请求是移动应用开发中常见的任务之一,Flutter提供了强大且易于使用的网络请求库,使得我们能够轻松地与服务器进行通信。我们将探讨不同类型的网络请求、错误处理、异步操作以及如何解析和处理响应数据。
207 0

热门文章

最新文章