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) 包含网址的 二维码生成 是大家平时最常接触 ...
随机推荐
- python的tecplot模块(tecplot新特性)
Python的tecplot模块仅支持tecplot2017以上 首先安装tecplot2017 安装完成以后,安装python的tecplot模块 可以通过终端转入tecplot安装目录下的pyte ...
- hypermesh对msh文件或者cas文件重新命名边界
原视频下载地址: https://pan.baidu.com/s/1c1Thqm 密码: muhe
- iview 的事件绑定
iview 内的组件样式是不错,有时候我们想用它且绑定某个事件: 比如,我们使用了步骤条组件(Steps),然后绑定点击事件,实现每次点击某个步骤条内的step 就显示此step的具体信息, < ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- Windows EXE 依赖DLL查看
dumpbin (这个是visual studio 提供的工具或者可以安装 Dependency Walker)来查看 DLL 依赖关系 dumpbin /dependents filename.ex ...
- Java面试底层原理
面试发现经常有些重复的面试问题,自己也应该学会记录下来,最好自己能做成笔记,在下一次面的时候说得有条不紊,深入具体,面试官想必也很开心.以下是我个人总结,请参考: HashSet底层原理:(问了大几率 ...
- ResponseBody和文件上传
SpringMVC默认使用MappingJacksonHttpMessageConverter对json数据进行转换 <dependency> <groupId>com.fas ...
- LeetCode_437. Path Sum III
437. Path Sum III Easy You are given a binary tree in which each node contains an integer value. Fin ...
- xshell的ssh连接频繁提示Socket error Event: 32 Error: 10053(待验证)
修改/etc/ssh/sshd_config下的配置文件 将ClientAliveInterval的值修改为60 然后重启ssh服务器 目前没有在频繁出现ssh断开问题了,应该是有效的
- intellij idea搭建SpringBoot
1.安装mavn在settings.xml设置下载链接 <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeec ...