flutter 如何将具有可选参数的函数从父部件传递到子部件?

ergxz8rk  于 2023-06-30  发布在  Flutter
关注(0)|答案(4)|浏览(174)

我不能使用在子部件中具有可选参数的函数(名称为FixUI)。This is original function declared in parent widgetThis is the line error occured(red line: Underfined~)
我想让fixContact函数参数:fixContact,index,contact,但可选。我该怎么做?flutter有这个功能吗?还有其他办法吗?还是我误解了什么?

watbbzwu

watbbzwu1#

进行以下更改:

class FixUI extends StatefulWidget {
  final Function? fixContact;
  final int? index;
  List? contact;

  const FixUI({
    super.key,
    this.fixContact,
    this.index,
    this.contact,
  });

  @override
  State<FixUI> createState() => _FixUIState();
}
yptwkmov

yptwkmov2#

要使小部件参数成为可选参数,您必须使它们可为空或提供默认值。另外,目前,您不指定函数参数,而是指定小部件参数。在这种情况下,如果函数参数在花括号内命名,则它们是可选的。
下面是一个如何向函数提供更多信息的示例。

import 'package:flutter/material.dart';

void main() {
  runApp(const MainApp());
}

String bar({int? index, List<String> contact = const []}) {
  return 'foo';
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Foo(
            fixContact: bar,
          ),
        ),
      ),
    );
  }
}

class Foo extends StatefulWidget {
  const Foo({
    required this.fixContact, 
    super.key,
  });

  final String Function(
      {int index,
      List<String> contact
      }) fixContact;

  @override
  State<Foo> createState() => _FooState();
}

class _FooState extends State<Foo> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.fixContact(index: 5));
  }
}
amrnrhlw

amrnrhlw3#

我发现了一个愚蠢的错误。。我混淆了构造函数和函数参数。

sg2wtvxw

sg2wtvxw4#

1.使用所需的可选参数在父小部件中定义回调函数。例如:typedef MyCallback = void Function(int optionalParam);
1.在父小部件中,创建回调函数的示例,并将其作为参数传递给子小部件。如果需要,请确保提供可选参数。例如:

class ParentWidget extends StatelessWidget {
  final MyCallback callback;

  ParentWidget({this.callback});

  @override
  Widget build(BuildContext context) {
    return ChildWidget(callback: callback);
  }
}

3.在子widget中,定义一个与函数签名类型相同的回调属性。
类ChildWidget扩展StatelessWidget { final MyCallback callback;
});
@override Widget build(BuildContext context){ //需要时使用回调函数返回RaisedButton(onPressed:(){ //你可以使用或不使用可选参数callback来调用回调(42);//提供可选参数},child:Text('调用父回调'),);您的位置
1.当使用父部件和子部件时,将回调函数传递给父部件并相应地处理它。例如:
ParentWidget(回调:(int optionalParam){ //处理父widget print('Optional parameter received:$optionalParam');},)

相关问题