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的更多相关文章

  1. self sqflite sample =======================

    import 'package:path_provider/path_provider.dart'; import 'dart:async'; import 'package:flutter/mate ...

  2. isolate demo

    dependencies dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to yo ...

  3. flutter isolate demo

    main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...

  4. iOS苹果官方Demo合集

    Mirror of Apple’s iOS samples This repository mirrors Apple’s iOS samples. Name Topic Framework Desc ...

  5. Flutter数据库Sqflite之增删改查

    Flutter数据库Sqflite之增删改查   简介 sqflite是Flutter的SQLite插件,支持iOS和Android,目前官方版本是sqflite1.1.3 sqflite插件地址:h ...

  6. 理解CSS3 isolation: isolate的表现和作用

    转自:http://www.zhangxinxu.com/wordpress/?p=5155 只要元素可以创建层叠上下文,就可以阻断mix-blend-mode! 于是,不仅仅是isolation:i ...

  7. isolate 通信

    main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...

  8. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  9. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

随机推荐

  1. sprintf格式化字符串漏洞(转)

    深入解析sprintf格式化字符串漏洞 特征: 如何利用: 可以看到, php源码中只对15种类型做了匹配, 其他字符类型都直接break了,php未做任何处理,直接跳过,所以导致了这个问题: 没做字 ...

  2. golang 内存监控

    golang 内存监控 - 简书 https://www.jianshu.com/p/38dc129b6870

  3. PostgreSQL中的The Oversized-Attribute Storage Technique(TOAST:超大属性存储技术)

    PostgreSQL使用固定的页面大小(通常为8kB),并且不允许元组跨越多个页面.因此,不可能直接存储非常大的字段值.为了克服这种限制,将大字段值压缩和/或分解成多个物理行.这对用户来说是透明的,对 ...

  4. Linux_CentOS 中systemctl 管理服务、防火墙 firewalld 以及 SELinux 配置

    使用 systemctl 管理服务 systemctl 就是 service 和 chkconfig 这两个命令的整合,在 CentOS 7 就开始被使用了,systemctl是系统服务管理器命令,它 ...

  5. 泡泡一分钟:Using Geometric Features to Represent Near-Contact Behavior in Robotic Grasping

    张宁  Using Geometric Features to Represent Near-Contact Behavior in Robotic Grasping链接:https://pan.ba ...

  6. Spring boot后台搭建二集成Shiro权限控制

    上一篇文章,实现了用户验证 查看,接下来实现下权限控制 权限控制,是管理资源访问的过程,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等 Apache Shir ...

  7. Java中缓存的介绍

    一.什么是缓存1.Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问2.凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之 ...

  8. ObjectARX开发VC版本对照表R14~AutoCAD2020

  9. JAVA代码:生成一个集合,自定义大小,100以内的随机整数

    JAVA代码:生成一个集合,自定义大小,100以内的随机整数 方法一:(Random类) package com.dawa.test; import java.util.ArrayList; impo ...

  10. spring security的BCryptPasswordEncoder加密和对密码验证的原理

    目录 BCryptPasswordEncoder加密和对密码验证的原理 一.加密算法和hash算法的区别 二.源码解析 1. encode方法 2. BCrypt.hashpw方法 3. matche ...