8-flutter 异步和线程
线程和异步的UI
1 异步的使用
Dart 有一个单线程执行模型,支持Isolate(一种在另外一种线程运行dart的方法),一个事件循环和异步编程。
可以使用async / await 来做网络请求不会挂起UI
使用http 导入
import ‘dart:io’;
import ‘dart:convert’;
// 加载数据
dataHandle()async{String url = "https://www.apiopen.top/journalismApi";var responseBody;var http = new HttpClient();var request = await http.getUrl(Uri.parse(url));var response = await request.close();if (response.statusCode == 200){print("Success");responseBody = await response.transform(utf8.decoder).join();print(responseBody);}else{print("error happend");}
}
2 网络请求数据 加载到列表中去
import 'dart:io';import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';import 'dart:convert';
void main() => runApp(MyApp());class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue,),home: SampleAppPage(),);}
}class SampleAppPage extends StatefulWidget{SampleAppPage({Key key}) : super(key:key);@override_SampleAppPageState createState() => _SampleAppPageState();}class _SampleAppPageState extends State<SampleAppPage>
{List widgets =[]; // 加载数据dataHandle()async{String url = "https://www.apiopen.top/journalismApi";var responseBody;var http = new HttpClient();var request = await http.getUrl(Uri.parse(url));var response = await request.close();if (response.statusCode == 200){print("Success");responseBody = await response.transform(utf8.decoder).join();responseBody = json.decode(responseBody);// 通过调用setState 方式来更新UIsetState(() {widgets = responseBody["data"]["tech"];print(widgets.length);}); }else{print("error happend");}}// 初始化状态的时候加载数据@overridevoid initState() {super.initState();dataHandle();}Widget getRow (int idx){return Padding(padding: EdgeInsets.all(10),child: Text("${widgets[idx]["title"]}",style: new TextStyle(fontSize: 22,color: Colors.green),),);}@override Widget build(BuildContext context){return Scaffold(appBar: AppBar(title: new Text("Hello World")),body: ListView.builder(itemCount: widgets.length,itemBuilder: (BuildContext context,int idx){return getRow(idx);},),);}
}
8-flutter 异步和线程相关推荐
- Springboot异步任务线程池
文章目录 1. 启动类添加@EnableAsync注解 2. 异步方法添加@Async注解 3. 自定义线程池以及线程池异常策略 1. 启动类添加@EnableAsync注解 package com. ...
- python线程池原理_Django异步任务线程池实现原理
这篇文章主要介绍了Django异步任务线程池实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 当数据库数据量很大时(百万级),许多批量数据修改 ...
- 异步编程-线程实现异步编程
异步编程-线程实现异步编程 使用线程实现异步 第一种方式 第二种方式 问题 在日常开发中我们经常会遇到这样的情况,即需要异步地处理一些事情,而不需要知道异步任务的结果.比如在调用线程里面异步打日志,为 ...
- android并发命令,Android开发实践:基于命令模式的异步任务线程
关于Android的异步操作,我在文章<Android开发实践:线程与异步任务>中介绍了两种方法,一种是采用线程,另一种是采用AsyncTask,今天再深入探讨下另一种模型:命令式的异步任 ...
- 12、Nepxion Discovery 之 Discovery Agent 解决异步场景线程 ThreadLocal 上下文丢失问题
在进行微服务调用的时候,不管是服务之间(A 服务调用 B 服务)还是服务内部调用(服务 A 某个方法进行里有异步)都存在异步调用.但是 Nepxion Discovery 在进行参数传递的时候很多情况 ...
- pthread异步_探索 Flutter 异步消息的实现
本文作者:赵旭阳 字节跳动资深工程师 一.简介 我们在进行 Android 开发的时候,会通过创建一个 Handler 并调用其 sendMessage 或 Post 方法来进行异步消息调用,其背后 ...
- android 异步编程,flutter异步编程-事件循环、Isolate、Stream(流)
事件循环.Isolate 开始前我们需要明白 Dart 是单线程的并且 Flutter 依赖于 Dart 如果你知道js 中的event loop 将很好理解dart的整个异步过程 先看一段代码 im ...
- 【Flutter 异步编程 - 捌】 | 计算耗时? Isolate 来帮忙
一.问题引入 - 计算密集型任务 假如现在有个需求,我想要计算 1 亿 个 1~10000 间随机数的平均值,在界面上显示结果,该怎么办? 可能有小伙伴踊跃发言:这还不简单,生成 1 亿 个随机数,算 ...
- 探索 Flutter 异步消息的实现
本文作者:赵旭阳 一.简介 我们在进行 Android 开发的时候,会通过创建一个 Handler 并调用其 sendMessage 或 Post 方法来进行异步消息调用,其背后涉及到了三个面试经常 ...
最新文章
- 宏基因组分析技术研讨会-2019年最后一期
- 重要通知 | WanaCrypt0r 2.0及Onion等勒索软件安全建议
- Kali Linux又增加一个顶级域名kali.download
- python gui插件_Python进阶量化交易专栏场外篇17- GUI控件在回测工具上的添加
- Codeforces - 914F bitset 维护字符串匹配个数
- PHP中foreach遍历循环的使用(两种用法)
- Linux系统初学者指南,观点|Linux 系统调用的初学者指南
- 制作 mysql的rpm文件_自制mysql.rpm安装包
- ajax.request提交,ajax request 请求
- 将markdown文本转换为微信文章格式的解决方案
- 【Gerrit】Add a Member
- linux下安装软件后的环境变量设置
- c语言儿童教学_五岁儿童的自然语言处理
- HTML5全局属性汇总
- fisheye calib视野调整
- 陈文灯对话高分学子 定位07年考研数学复习导向
- 个人最喜欢的几款火狐扩展
- (附源码)springboot猪场管理系统 毕业设计 160901
- 计算机视觉注意力网络(一)——简介
- ar vr mr 计算机技术,VR技术是什么?AR、MR又是什么?