Flutter圈子Flutter中文社区Flutter

Flutter中的方法回调

2019-07-17  本文已影响0人  哎呀啊噢

类似于Android中的Callback;iOS中的block;大致思路是一样的,需要自定义一个函数或者使用官方自己的也行,直接上代码:
先写一个按钮点击事件,然后监听点击事件;

import 'package:flutter/material.dart';

/*
* 按钮监听->回调
* */
//第一种自定义回调方法
typedef MyCallBackFuture = Future Function(); 

class MyCallBack extends StatelessWidget {
  @required
  VoidCallback onPress; //第二种:回调函数的签名,没有参数,也不返回数据。

  //MyCallBackFuture myCallBackFuture;//自定义
  MyCallBack(VoidCallback onPress) {
    this.onPress = onPress;
  }

//  MyCallBack(MyCallBackFuture callBack) {
//    this.myCallBackFuture = callBack;
//  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FlatButton(
          onPressed: onPress, //或者 callBack
          child: Text(
            '按钮',
            style: TextStyle(
              fontSize: 16.0,
              color: Colors.black,
            ),
          ),
          color: Colors.green,
        ),
      ),
    );
  }
}

然后运行,在MyCallBack构造方法中传入相应函数,实现回调;

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      home: new MyCallBack(onPress),//或者click
//      new MyHomePage(),
    );
  }
}

//第一种
Future click() {
  //todo do some thing
  print("click.......");
}
//第二种
void onPress(){
  print("onPress.......");
}

总结:
俩种方法使用起来基本一样,其实官方还定义了好多回调方法,可以自行查看源码(window.dart);最主要是就是Future;

Dart是单线程编程语言,如果任何代码阻塞线程执行都会导致程序卡死(IO操作、延时执行等).异步编程防止出现阻塞操作.Dart使用Future对象表示异步操作.

Dart有自己的线程机制,叫isolate(隔离),App的启动入口main函数就是一个isolate,我们也可以通过导入import 'dart:isolate'创建自己的isolate,对于多核CPU来说,多个isolate可以提高运算效率,但应在合理范围内;Dart中的isolate之间无法直接共享内存,不同的isolate之间只能通过isolate API进行通信;

什么是Future

Future表示在将来某事获取一个值的方式.当一个返回Future的函数被调用的时候,做了俩件事:
1、函数把自己放入队列和返回一个未完成的Future对象.
2、之后当值可用时,Future带着值变成完成状态.

为了获取Future的值,有俩种方式:
1、使用async和await.
2、使用Future的接口.

说async和await

Dart线程中有一个消息循环机制(event loop)和俩个队列(event queue和microtask queue).

当事件循环正在处理microtask的时候,event queue会被堵塞.

Future就是event;

上一篇 下一篇

猜你喜欢

热点阅读