前言
在现代应用程序开发中,文件操作和网络请求是不可或缺的技能,尤其在使用 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; }