isolate sqflite demo
main.dart
import 'package:flutter/material.dart';
import 'demo_isolates.dart';
import 'package:rxdart/rxdart.dart';
import 'dbhelper.dart';
import 'package:flutter_isolate/flutter_isolate.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
'/':(context)=>MyHome(),
'/second':(context)=>SecondPage(),
},
);
}
} class MyHome extends StatelessWidget{
DataBloc dataBloc = DataBloc();
FlutterIsolate isolate;
DB db = DB(); checkData()async{
var a = await db.queryData('SELECT * FROM type');
print(a);
} @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('sss'),),
body: Container(child: Column(
children: <Widget>[
StreamBuilder(
stream: dataBloc.dataBloc.stream,
builder: (context, snapshot){
if(snapshot.hasData){
return Text('${snapshot.data}');
}else{
return Text('pending');
}
},
),
RaisedButton(child: Text('start'),onPressed: ()async{
isolate = await spawnIsolate('abc', dataBloc);
},),
RaisedButton(child: Text('stop'),onPressed: (){
isolate.kill();
},),
RaisedButton(child: Text('check'),onPressed: (){
checkData();
},),
RaisedButton(child: Text('go to 2'),onPressed: (){
Navigator.of(context).pushNamed('/second');
},),
],
),),
);
}
} class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('second page'),),
body: Container(child: Center(child: Text('second'),),),
);
}
} class DataBloc {
ReplaySubject dataBloc = ReplaySubject();
}
demo_isolates.dart
import 'dart:async';
import 'dart:isolate';
import 'dbhelper.dart';
import 'main.dart';
import 'package:flutter_isolate/flutter_isolate.dart'; Future<FlutterIsolate> spawnIsolate(String type, DataBloc bloc) async {
ReceivePort receivePort = new ReceivePort();
ReceivePort listenPort = ReceivePort();
FlutterIsolate isolate = await FlutterIsolate.spawn(dartIsolateLongRunningOperation, receivePort.sendPort);
SendPort t = await receivePort.first;
t.send({'sender':listenPort.sendPort, 'msg':type}); listenPort.listen((data){
bloc.dataBloc.add(data);
});
return isolate;
} void dartIsolateLongRunningOperation(SendPort sendPort) async {
ReceivePort port = ReceivePort();
sendPort.send(port.sendPort);
port.listen((data)async{
await doWork(data['msg'], data['sender']);
});
} Future doWork(String type, SendPort sender)async{
DB db = DB();
int i = 0;
while(i<30){
var a = await db.addData('type', {'name':'$i'});
sender.send('id: $a');
i++;
await Future.delayed(Duration(seconds: 1));
} }
isolate sqflite demo的更多相关文章
- self sqflite sample =======================
import 'package:path_provider/path_provider.dart'; import 'dart:async'; import 'package:flutter/mate ...
- isolate demo
dependencies dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to yo ...
- flutter isolate demo
main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...
- iOS苹果官方Demo合集
Mirror of Apple’s iOS samples This repository mirrors Apple’s iOS samples. Name Topic Framework Desc ...
- Flutter数据库Sqflite之增删改查
Flutter数据库Sqflite之增删改查 简介 sqflite是Flutter的SQLite插件,支持iOS和Android,目前官方版本是sqflite1.1.3 sqflite插件地址:h ...
- 理解CSS3 isolation: isolate的表现和作用
转自:http://www.zhangxinxu.com/wordpress/?p=5155 只要元素可以创建层叠上下文,就可以阻断mix-blend-mode! 于是,不仅仅是isolation:i ...
- isolate 通信
main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...
- 通过一个demo了解Redux
TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
随机推荐
- 15、基于consul+consul-template+registrator+nginx实现自动服务发现
一.架构图 二.组件介绍 1.Registrator Registrator:一个由Go语言编写的,针对docker使用的,通过检查本机容器进程在线或者停止运行状态,去注册服务的工具.所以我们要做的实 ...
- 通过Zabbix监控Tomcat单机多实例
前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控! Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步: 1.获取多实例 2. ...
- Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .pr ...
- 实验与作业(Python)-02 Python函数入门与温度转换程序(函数、input、eval、int、float、列表)
截止日期 实验目标 学会定义函数,使用函数.学会导入在某个文件中定义的函数. input获得值,然后通过eval或者int.float将其转换为相应的类型. 学会使用列表:访问列表.append.遍历 ...
- Python plot_surface(Axes3D)方法:绘制3D图形
3D 图形需要的数据与等高线图基本相同:X.Y 数据决定坐标点,Z 轴数据决定 X.Y 坐标点对应的高度.与等高线图使用等高线来代表高度不同,3D 图形将会以更直观的形式来表示高度. 为了绘制 3D ...
- 进程、线程、IP、端口间关系
进程.线程.IP.端口间关系 进程是指在系统中正在运行的一个应用程序: 线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元. 对于操作系统而言,其调度单元是线程.一个进程至少包括 ...
- delete、truncate、drop三种删除语句联系与区别
相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...
- Tomcat Response encode
Character Encoding - Apache Tomcat - Apache Software Foundation https://cwiki.apache.org/confluence/ ...
- 轻量级Web服务器http-server
http-server是一个简单的零配置命令行http服务器.可用于h5页面手机端测试 Vue .Angualr.React项目打包后真机测试 github地址:https://github.com/ ...
- Flutter Android 正式打包、以及升级应用 重新打包
Flutter Android 正式打包 打开androidStudio软件 1.修改版本号. android->app->src->main->AndroidManifest ...