我创建了一个自定义 StatefulWidget
,它接受一个 Widget
作为参数。
import 'package:flutter/material.dart';
class CustomWidget extends StatefulWidget {
final Widget myWidget;
CustomWidget({this.myWidget});
@override
_CustomWidgetState createState() => _CustomWidgetState();
}
class _CustomWidgetState extends State<CustomWidget> {
@override
Widget build(BuildContext context) {
return Container(
child: widget.myWidget(name: 'ASAD'), //I want to achieve this
);
}
}
我正在传递另一个名为 StatefulWidget
的 Profile
作为该参数小部件。现在我想访问传递的小部件的构造函数。
import 'package:flutter/material.dart';
class Profile extends StatefulWidget {
final String name;
Profile({this.name});
@override
_ProfileState createState() => _ProfileState();
}
class _ProfileState extends State<Profile> {
@override
Widget build(BuildContext context) {
return Center(child: Text('${widget.name}'),);
}
}
我在这里使用了 CustomWidget
,它以小部件作为参数
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomWidget(myWidget: Profile(),) //I don't want to pass the argument here
);
}
}
我可以使用 typedef
完成类似的操作,但它开始抛出错误。
typedef CustomCallBack = Widget Function({String name});
class CustomWidget extends StatefulWidget {
final CustomCallBack myWidget;
CustomWidget({this.myWidget});
@override
_CustomWidgetState createState() => _CustomWidgetState();
}
class _CustomWidgetState extends State<CustomWidget> {
@override
Widget build(BuildContext context) {
return Container(
child: widget.widget(name: 'ASAD'), //I'm able to access the constructor here but now I get an error.
);
}
}
错误
error: The argument type 'Profile' can't be assigned to the parameter type 'Widget Function({String name})'. (argument_type_not_assignable
注意:基于我正在开发但无法共享代码的应用程序,我重新创建了这个场景并且就问题而言是相同的。
答案 0 :(得分:0)
尝试更改 CustomWidget 小部件child: widget.widget(name: 'ASAD')
中的这一行,仅针对您要传递的小部件,而不放置 (name: 'ASAD')
。
因此,当您传递 Profile Widget 时,您必须指定 name 参数的值!
body: CustomWidget(myWidget: Profile(name: 'ASAD'),)
答案 1 :(得分:0)
请尝试使用这个:
gnome-terminal -- bash -c \"./$fileNameWithoutExt\"