Android 其中是回调函数';谁的身体在颤抖?

Android 其中是回调函数';谁的身体在颤抖?,android,flutter,dart,Android,Flutter,Dart,发件人: 在下面的代码中,我可以看到回调StringValue的声明。我可以看到它被称为 我找不到它的尸体在哪里。这意味着,当我们编写一个函数来接收一些参数时,我们用这些参数做一些事情,然后返回一些东西 这里的回调在哪里发生的 import 'package:flutter/material.dart'; typedef StringValue = String Function(String); // ignore: must_be_immutable class EditingPage

发件人:

在下面的代码中,我可以看到回调
StringValue
的声明。我可以看到它被称为

我找不到它的尸体在哪里。这意味着,当我们编写一个函数来接收一些参数时,我们用这些参数做一些事情,然后返回一些东西

这里的回调在哪里发生的

import 'package:flutter/material.dart';

typedef StringValue = String Function(String);

// ignore: must_be_immutable
class EditingPage extends StatefulWidget {
  _EditingPageState createState() => _EditingPageState();
  StringValue callback;
  EditingPage(this.callback);
}
class _EditingPageState extends State<EditingPage> {
  TextEditingController textController = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Widget Communication"),
        backgroundColor: Colors.red,
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Container(
            height: 50,
            margin: EdgeInsets.all(8),
            child: TextFormField(
              onTap: () {},
              controller: textController,
              maxLines: 1,
              maxLength: 20,
              decoration: InputDecoration(
                hintText: "Enter Some Text Here",
                contentPadding: EdgeInsets.all(8),
              ),
            ),
          ),
          RaisedButton(
              color: Colors.red,
              child: Text("Submit"),
              onPressed: () {
                widget.callback(textController.text);
                Navigator.pop(context);
              }),
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
typedef StringValue=字符串函数(字符串);
//忽略:必须是不可变的
类EditingPage扩展StatefulWidget{
_EditingPageState createState()=>U EditingPageState();
字符串值回调;
编辑页面(this.callback);
}
类_EditingPageState扩展状态{
TextEditingController textController=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“小部件通信”),
背景颜色:Colors.red,
),
正文:专栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
身高:50,
保证金:全部(8),
子项:TextFormField(
onTap:(){},
控制器:textController,
maxLines:1,
最大长度:20,
装饰:输入装饰(
hintText:“在此输入一些文本”,
contentPadding:EdgeInsets.all(8),
),
),
),
升起的按钮(
颜色:颜色,红色,
儿童:文本(“提交”),
已按下:(){
回调(textController.text);
Navigator.pop(上下文);
}),
],
),
);
}
}

您不清楚的是
typedef
的用法吗?它不声明函数,但定义别名。事实上,在下一版本的Dart Sdk中,还可以为函数以外的类型定义别名,例如
typedef MyStringList=List

在您报告的代码中,
callback
是一个能够存储函数的字段(准确地说,是带有字符串参数并返回字符串的函数),该字段由构造函数参数设置

因此,当您实例化EditingPage时,必须向其传递类型为
字符串函数(String)
(别名StringValue)的函数,例如:

var myCallback=(字符串值){
返回saveInMyDatabaseAndReturnId(值);
};
runApp(编辑页面(myCallback));

您不清楚的是
typedef
的用法吗?它不声明函数,但定义别名。事实上,在下一版本的Dart Sdk中,还可以为函数以外的类型定义别名,例如
typedef MyStringList=List

在您报告的代码中,
callback
是一个能够存储函数的字段(准确地说,是带有字符串参数并返回字符串的函数),该字段由构造函数参数设置

因此,当您实例化EditingPage时,必须向其传递类型为
字符串函数(String)
(别名StringValue)的函数,例如:

var myCallback=(字符串值){
返回saveInMyDatabaseAndReturnId(值);
};
runApp(编辑页面(myCallback));

这是否回答了您的问题?检查使用
编辑页面的位置(初始化)。此处。文章中的图片。这是否回答了你的问题?检查使用
编辑页面的位置(初始化)。此处。文章中的一张图片。