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;
}


相关文章
|
安全 网络协议 Java
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
85 0
|
4月前
|
存储 缓存 Dart
Flutter&鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
本文详细介绍了如何在 Flutter 中使用 Dio 封装网络请求,实现用户登录身份验证及免登录缓存功能。首先在 `pubspec.yaml` 中添加 Dio 和 `shared_preferences` 依赖,然后创建 `NetworkService` 类封装 Dio 的功能,包括请求拦截、响应拦截、Token 存储和登录请求。最后,通过一个登录界面示例展示了如何在实际应用中使用 `NetworkService` 进行身份验证。希望本文能帮助你在 Flutter 中更好地处理网络请求和用户认证。
242 1
|
10月前
|
Linux
基于 Linux 的文件操作 网络编程的最后一环
Linux下万物皆文件 在了解了客户端和服务器的函数调用之后,我们只需要了解下文件操作就能编写出属于自己的客户端和服务器了,还能让他们进行通信。
65 0
|
7月前
|
缓存
Flutter Image从网络加载图片刷新、强制重新渲染
Flutter Image从网络加载图片刷新、强制重新渲染
239 1
|
10月前
|
存储 XML 前端开发
【Flutter前端技术开发专栏】Flutter中的网络请求与数据处理
【4月更文挑战第30天】本文介绍了Flutter开发中的网络请求和数据处理。 Flutter开发者可选择http(官方库)或dio(功能更强大)进行网络请求。http库简单易用,dio支持更多功能如拦截器。数据处理涉及JSON和XML解析,数据存储可选SharedPreferences或Hive,数据传递推荐使用InheritedWidget或Provider状态管理库。了解这些知识点能提升Flutter开发效率。
243 0
【Flutter前端技术开发专栏】Flutter中的网络请求与数据处理
|
10月前
|
XML JSON 前端开发
【Flutter前端技术开发专栏】Flutter中的图片、视频与网络资源加载
【4月更文挑战第30天】Flutter是谷歌的开源前端框架,因其高性能、流畅UI和多端运行能力受开发者喜爱。本文聚焦于Flutter中的资源加载:使用`Image`组件加载静态、网络和本地图片;通过`video_player`库加载和播放视频;利用`http`包进行网络资源请求。掌握这些技巧将有助于提升Flutter应用的开发效率和质量。
77 0
【Flutter前端技术开发专栏】Flutter中的图片、视频与网络资源加载
|
10月前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求
|
存储 Java API
使用Java NIO进行文件操作、网络通信和多路复用的案例
使用Java NIO进行文件操作、网络通信和多路复用的案例
|
Dart API
带你读《深入浅出Dart》二十九、Flutter网络请求(1)
带你读《深入浅出Dart》二十九、Flutter网络请求(1)
122 0
|
XML JSON Dart
带你读《深入浅出Dart》二十九、Flutter网络请求(2)
带你读《深入浅出Dart》二十九、Flutter网络请求(2)
108 0

热门文章

最新文章

  • 1
    【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
    26
  • 2
    flutter3-wetrip跨平台自研仿携程app预约酒店系统模板
    33
  • 3
    通过外部链接启动 Flutter App(详细介绍及示例)
    31
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    152
  • 5
    零基础构建即时通讯开源项目OpenIM移动端-Flutter篇
    100
  • 6
    flutter3-dart3-dymall原创仿抖音(直播+短视频+聊天)商城app系统模板
    59
  • 7
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    174
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    54
  • 9
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    82
  • 10
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    176