flutter isolate demo

 

main.dart

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

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;
  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>[
            RaisedButton(child: Text('addData'),onPressed: ()async{
              addData();
            },),
            RaisedButton(child: Text('check data'),onPressed: ()async{
              checkData();
            },),
            RaisedButton(child: Text('start'),onPressed: ()async{
              isoltex = await createIsolate();
            },),
            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');
        }),
      ),
    );
  }
}

  

isolates.dart

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

Future<FlutterIsolate> createIsolate() async {

  ReceivePort receivePort = ReceivePort();

  FlutterIsolate isolate = await FlutterIsolate.spawn(
    isolateEntry,
    receivePort.sendPort,
  );
  receivePort.listen((value){
    print('from spawrn side: $value');
  });
  return isolate;
}


isolateEntry(SendPort sendPort)async{

  DB db = DB();
  int i=0;
  while (i<40){
    var d = await db.addData('type', {'name':'$i'});
    i++;

    sendPort.send('ok $d');
    await Future.delayed(Duration(seconds: 1));
  }
}

  

上一篇:基于JDK实现的动态代理demo


下一篇:isolate两三事