Это мой первый вопрос в Stackoverflow. Я пытаюсь вызвать виджет в другом StatefulWidget, когда мы передаем его как параметр класса класса.
Итак, у меня есть этот пользовательский виджет:
class MyTextWidget extends StatelessWidget {
final String text;
MyTextWidget({ @required this.text });
@override
Widget build(BuildContext context) {
return Text(this.text);
}
}
, который я хочу использовать в другом виджете, например это (с передачей в параметре конструктора класса)
import 'package:myproject/MyTextWidget.dart';
.
.
.
// Passing widget like this
child: Example(display: MyTextWidget,text: this.widget.text);
.
.
.
// And use this widget like this
this.widget.display(text: this.widget.text);
это мой первый код:
class Example extends StatefulWidget {
final Widget display;
final String text;
Example({ @required this.display, @required this.text });
@override
State<StatefulWidget> createState() {
return ExampleState();
}
}
class ExampleState extends State<Example> {
@override
Widget build(BuildContext context) {
return this.widget.display(text: this.widget.text); // here we have error
}
}
но у меня есть эта ошибка
The expression doesn't evaluate to a function, so it can't be invoked.dart(invocation_of_non_function_expression)
Я понимаю, что мне нужно сделать typedef для этой проблемы, поэтому я улучшаю код следующим образом:
typedef Widget DisplayType({ @required String text });
class Example extends StatefulWidget {
final DisplayType display;
final String text;
Example({ @required this.display, @required this.text });
@override
State<StatefulWidget> createState() {
return ExampleState();
}
}
class ExampleState extends State<Example> {
@override
Widget build(BuildContext context) {
return this.widget.display(text: this.widget.text);
}
}
Наша ошибка исправлена, но когда я хочу передать MyTextWidget в другой виджет:
child: Example(display: MyTextWidget,text: this.widget.text);
Наконец я получаю эту ошибку:
The argument type 'Type' can't be assigned to the parameter type 'Widget Function({String text})'.dart(argument_type_not_assignable)
как я могу решить эту проблему?