Flutter中的方法回调

作者: 哎呀啊噢 | 来源:发表于2019-07-17 18:04 被阅读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

  • await关键字必须在async函数内部使用;
  • 调用async函数必须使用await关键字;

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

  • event queue包含所有外来的事件:IO操作,手势、绘制、延时以及isolate之间的通信等.任意isolate中新增的event都会放入event queue中排队等待执行.
  • microtask queue只在当前isolate的任务队列中排队,优先级高于event queue.

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

Future就是event;

相关文章

  • Flutter中的方法回调

    类似于Android中的Callback;iOS中的block;大致思路是一样的,需要自定义一个函数或者使用官方自...

  • 为什么说过滤器Filter由回调实现

    回调(个人理解):类A中任意方法中调用了类B的方法,而B方法又调用了A中某回调方法; 加了接口的说法:回调接口的实...

  • Future--Demo

    创建Future (){}为Future的回调例如: Flutter相关回调函数 future中的函数: then...

  • swift动态获取WKWebView title

    然后在回调方法中

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • iOS 程序的五种状态及其对应的调用方法

    1、程序的五种状态 2、AppDelegate中的回调方法和通知 (1)回调方法:application:didF...

  • React native fetch获取JSON问题

    以上then()方法是promise调用链中的回调方法 在此发现一个坑! 在上面的fetch回调方法中,我们将从服...

  • Android中接口回调/方法回调

    在android开发中我们很多地方都用到了方法的回调,回调就是把方法的定义和功能导入实现分开的一种机制,目的是为了...

  • flutter block回调

    block回调在oc中很常见,到了flutter中仍然有block回调 自定义一个StatefulWidget P...

  • kotlin

    kotlinonActivityResult回调 在onActivityResult回调方法中,一定要注意把Int...

网友评论

    本文标题:Flutter中的方法回调

    本文链接:https://www.haomeiwen.com/subject/rdpclctx.html