Flutter flatter从其父级访问子函数

Flutter flatter从其父级访问子函数,flutter,dart,Flutter,Dart,在我的电子商务管理应用程序中 我有一个非常大的表格(产品表格),有很多章节,第一部分是标题、描述和价格,一部分是销售,一部分是颜色、抓拍和图片等。 我将它划分为几个独立类中的小部件,每个小部件在另一个独立类中都有自己的子部件 每个子类都有一个(onSave)函数,我需要从位于父级的主窗体按钮触发该函数,因此如何从父级访问所有(onSave)函数 在这个(onSave)函数中,我使用provider模式将我在每个小部件中收集的数据传递给provider类,在那里我可以将datd发送到服务器您可以使

在我的电子商务管理应用程序中 我有一个非常大的表格(产品表格),有很多章节,第一部分是标题、描述和价格,一部分是销售,一部分是颜色、抓拍和图片等。 我将它划分为几个独立类中的小部件,每个小部件在另一个独立类中都有自己的子部件 每个子类都有一个(onSave)函数,我需要从位于父级的主窗体按钮触发该函数,因此如何从父级访问所有(onSave)函数

在这个(onSave)函数中,我使用provider模式将我在每个小部件中收集的数据传递给provider类,在那里我可以将datd发送到服务器

您可以使用Form()小部件并将您的输入字段作为子项放入其中。然后定义一个GlobalKey()并将其传递给表单的key属性。在GlobalKey上调用save方法后,将调用saved函数上的所有子窗口小部件

e、 g

导入“包装:颤振/材料.省道”;
类MyScreen扩展StatefulWidget{
@凌驾
_MyScreenState createState()=>\u MyScreenState();
}
类_MyScreenState扩展状态{
final _formKey=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
主体:填充物(
填充:常数边集全部(8.0),
子:列(
儿童:[
形式(
键:_formKey,
子:列(
儿童:[
TextFormField(
装饰:输入装饰(标签文本:“名称”),
onSaved:(姓名){
//做事
},
),
TextFormField(
装饰:输入装饰(标签文本:“类别”),
保存:(类别){
//做事
},
),
],
)),
升降按钮(
已按下:(){
_formKey.currentState.save();
},
儿童:文本(“按我”),
)
],
),
),
);
}
}

ya我对这种方法很熟悉,但是如果表单子项在不同的类中分离,那么在您的示例中,将每个TextFormField放入new TextFormField.dart文件中的新无状态小部件中会怎么样呢?因此,现在不要让所有子项都在同一个文件中,而是让每个子项都存在于分离的类(小部件)中然后想象有20个,我如何应用_formKey.currentState.save();在所有的人身上。
import 'package:flutter/material.dart';

class MyScreen extends StatefulWidget {
  @override
  _MyScreenState createState() => _MyScreenState();
}

class _MyScreenState extends State<MyScreen> {
  final _formKey = GlobalKey<FormState>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Form(
                key: _formKey,
                child: Column(
                  children: [
                    TextFormField(
                      decoration: InputDecoration(labelText: "Name"),
                      onSaved: (name) {
                        // do stuff
                      },
                    ),
                    TextFormField(
                      decoration: InputDecoration(labelText: "Category"),
                      onSaved: (category) {
                        // do stuff
                      },
                    ),
                  ],
                )),
            ElevatedButton(
              onPressed: () {
                _formKey.currentState.save();
              },
              child: Text("pressme"),
            )
          ],
        ),
      ),
    );
  }
}