首页 > 其他分享 >异步UI runOnUiThread 在Flutter中等价于什么

异步UI runOnUiThread 在Flutter中等价于什么

时间:2022-12-01 13:38:32浏览次数:66  
标签:http flutter UI widgets new runOnUiThread Flutter


异步UI
runOnUiThread 在Flutter中等价于什么
Dart是单线程执行模型,支持Isolates(在另一个线程上运行Dart代码的方式)、事件循环和异步编程。 除非您启动一个Isolate,否则您的Dart代码将在主UI线程中运行,并由事件循环驱动(译者语:和JavaScript一样)。

例如,您可以在UI线程上运行网络请求代码而不会导致UI挂起(译者语:因为网络请求是异步的):

loadData() async {
String dataURL = "https://jsonplaceholder.typicode.com/posts";
http.Response response = await http.get(dataURL);
setState(() {
widgets = JSON.decode(response.body);
});
}

要更新UI,您可以调用setState,这会触发build方法再次运行并更新数据。

以下是异步加载数据并将其显示在ListView中的完整示例:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
runApp(new SampleApp());
}

class SampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Sample App',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new SampleAppPage(),
);
}
}

class SampleAppPage extends StatefulWidget {
SampleAppPage({Key key}) : super(key: key);

@override
_SampleAppPageState createState() => new _SampleAppPageState();
}

class _SampleAppPageState extends State<SampleAppPage> {
List widgets = [];

@override
void initState() {
super.initState();

loadData();
}

@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Sample App"),
),
body: new ListView.builder(
itemCount: widgets.length,
itemBuilder: (BuildContext context, int position) {
return getRow(position);
}));
}

Widget getRow(int i) {
return new Padding(
padding: new EdgeInsets.all(10.0),
child: new Text("Row ${widgets[i]["title"]}")
);
}

loadData() async {
String dataURL = "https://jsonplaceholder.typicode.com/posts";
http.Response response = await http.get(dataURL);
setState(() {
widgets = JSON.decode(response.body);
});
}
}

您还可以看看下面的博客文章,回顾以前和继续学习,包含我在学习开发中遇到的难题等等

​​Flutter入门,学习历程,进入开发,在安卓手机运行起来​​Visual Studio code工具开发flutte总结
Flutter 跨平台开发 为什么选择Flutter
跨平台开发 为什么选择Flutter
Android 开发者 for Flutter (1)Flutter和Android中的View对比及如何更新widget
Android 开发者 for Flutter (2)如何布局? XML layout 文件跑哪去了?及布局中添加或删除组件
Android 开发者 for Flutter (3) flutter中动画是如何实现的 及 如何使用Canvas draw/paint
Flutter轮播图编写(两种方式)CarouselSlider和PageView(自动轮播,也可以手动左右拖拽)
flutter 中tabbar切换上下均可,banner轮播图,listview刷新添加更多,listview嵌套gridview
Flutter 项目编写 第三方插件库文件引入,本地图片 json数据引入解析flutter run 运行项目 所遇到的问题总结(Scaffold加padding及 flutter/material.dart’;爆红问题解决;listview嵌套gridview滑动问题) [Flutter 中 如何构建自定义 Widgets] [安卓Intent在Flutter中等价于什么?及数据传输和startActivityForResult 在Flutter中等价于什么] 如对您有帮助,欢迎starts 谢谢。下面是我自己写的demo 可以看看 一块学习:

[项目源码github](​​https://github.com/1136346879/flutter-)​

[感谢Flutter中文网](​​https://flutterchina.club/technical-overview/)​


标签:http,flutter,UI,widgets,new,runOnUiThread,Flutter
From: https://blog.51cto.com/u_15898516/5901794

相关文章

  • docker pull 下载镜像报错 pull access denied for ubantu, repository does not exis
    如果你是像我一样,Docker小白,那么在dockerpull时,很有可能会遇到和我同样的问题:好的,那么我就来具体说说我在执行下载ubantu镜像时遇到的问题,$dockerpullubantuUsi......
  • Arduino 连接扬声器喇叭,温湿度传感器,声音传感器并局部刷新ILI9486 LCD,LED
     最近玩Arduino时,有一块ILI9486错都LCD屏,它没有局部刷新功能,所以就把背景设置为黑色,然后用变量记住光标的位置,用设置文字颜色为黑色的方法在原位置重新显示相同的字符,这......
  • 企业想要做好数据分析,可以试试瓴羊Quick BI
    企业的数字化发展已经成为了一个发展的方向,可是各个企业如何才可以实现数字化发展确实成为了难题。从很多企业的内部发展中来讲,每一个部分的数据化的分析都已经成为了行业的......
  • layui upload 分块上传实现
    由于项目需要上传超大文件,当然现在的条件好了,1-3百M的文件没多大问题,但是超过1G的还是有问题的。(当然oss单个文件最高可以5g)对于大额文件上传存在上传缓慢甚至失败的问题......
  • 瓴羊Quick BI数据大屏,为企业提供数据可视化服务
    企业在运营管理过程中会产生海量数据,能否对这些数据快速收集并充分挖掘其内在价值,指导企业做出有利于发展的经营决策,是新时期推动企业实现可持续发展的重要前提。若无法合......
  • ESP8266开发之arduino环境搭建
    ESP8266开发之arduino环境搭建1.Arduino简介    Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲......
  • 瓴羊Quick BI数据大屏,服务企业数字化转型发展
    信息大爆炸时代下,中小企业在经营管理过程中也会衍生海量数据,如何充分挖掘数据价值,服务企业决策,成为当前阶段企业数字化转型发展的重点方向。若无法快速整合、分析并挖掘数据......
  • React Webpack copy文件到build路径
    目的:webpack打包时将资源文件copy到指定路径1:安装依赖copy-webpack-plugin、customize-cra、react-app-rewired2:修改script,使用react-app-rewired命令"build:copy":"......
  • 用DevExpress实现基于HTML&CSS的桌面应用程序的UI(二)
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风......
  • unity RPG Builder v1.1.0.8 插件分享
    仅供学习使用 一款制作RPG游戏的插件,提供了所有RPG游戏的功能包含技能,锻造,强化,任务,对话,背包等让开发者可以简单地点点点实现创造新的装备,怪物,NPC等功能有兴趣的小伙......