isolate 通信

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_isolate/flutter_isolate.dart';
import 'isolates.dart';
import 'dbhelper.dart';
import 'package:rxdart/rxdart.dart';
import 'dart:isolate';


void main() {
  runApp(MaterialApp(
    title: 'Flutter Demo',
    initialRoute: '/',
    routes: {
      '/':(context)=>MyApp(),
      '/second':(context)=>NextPage(),
    },
  ));
}

class MyApp extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}
class MyAppState extends State<MyApp> {
  FlutterIsolate isoltex;
  DataBloc bloc = DataBloc();
  ReceivePort toChild;
  DB db = DB();

  addData()async{
    var a = await db.addData('type', {'name':'11maintest'});
    print(a);
  }

  checkData()async{
    var b = await db.queryData('SELECT * FROM type');
    print(b);
  }
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text('sss'),),
      body: Container(child: Column(
          children: <Widget>[
            StreamBuilder(
              stream: bloc.dataBloc.stream,
              builder: (context, snapshot){
                if(snapshot.hasData){
                  return Text('${snapshot.data}');
                }else{
                  return Text('pending..');
                }
              },
            ),
            RaisedButton(child: Text('addData'),onPressed: ()async{
              addData();
            },),
            RaisedButton(child: Text('check data'),onPressed: ()async{
              checkData();
            },),
            RaisedButton(child: Text('start'),onPressed: ()async{
              isoltex = await createIsolate(bloc,'abc');
            },),
            RaisedButton(child: Text('pause'),onPressed: (){
              isoltex.pause();
            },),
            RaisedButton(child: Text('resume'),onPressed: (){
              isoltex.resume();
            },),
            RaisedButton(child: Text('kill'),onPressed: (){
              isoltex.kill();
            },),
            RaisedButton(child: Text('go to next'),onPressed: (){
              Navigator.of(context).pushNamed('/second');
            },)

          ]),
      ),
    );
  }
}


class NextPage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('page2'),),
      body: Container(
        child: RaisedButton(child:Text('btn'),
            onPressed: (){
              print('hello');
            }),
      ),
    );
  }
}

class DataBloc {
  ReplaySubject dataBloc = ReplaySubject();

}

  

isolates.dart

import 'package:flutter_isolate/flutter_isolate.dart';
import 'dart:async';
import 'dart:isolate';
import 'main.dart';

Future<FlutterIsolate> createIsolate(DataBloc bloc, String type) async {
  ReceivePort receivePort = ReceivePort();
  ReceivePort fromChild = ReceivePort();
  FlutterIsolate isolate = await FlutterIsolate.spawn(isolateEntry, receivePort.sendPort);
  SendPort t = await receivePort.first;
  t.send({'sender':fromChild.sendPort,'msg':type});
  fromChild.listen((value){
    bloc.dataBloc.add(value);
  });
  return isolate;
}


isolateEntry(SendPort sendPort)async{
  ReceivePort port = ReceivePort();
  sendPort.send(port.sendPort);

  port.listen((data)async{
    print('son $data');
    await doWork(data['msg'], data['sender']);
  });
}

Future doWork(data, SendPort s)async{
  print('start working');
  int i = 0;
  while(i<10){
    s.send('$data : $i');
    await Future.delayed(Duration(seconds: 1));
    i++;
  }
}

  

转载于:https://www.cnblogs.com/pythonClub/p/10822365.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值