将冻结的构造函数 Tear-Off 传递给通用小部件
Pass Freezed Constructor Tear-Off to Generic Widget
标题说的是什么。我有一个冻结的构造函数 tear-off,我正试图将其传递给 Widget,但它没有返回 null,我正试图弄清楚我做错了什么。这是冻结的 class:
@freezed
class PatientField with SetFieldOption, _$PatientField {
factory PatientField.firstName(String value) = PatientFirstName;
}
这是我最初的 Widget 的简化版本(实际显示正确):
class SinglePatientView2 extends ConsumerWidget {
const SinglePatientView2({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
print(PatientField.firstName('something'));
return Theme(
data: Theme.of(context).copyWith(dividerColor: Colors.transparent),
child: Expanded(
child: DefaultTabController(
length: 1,
child: Scaffold(
body: TabBarView(children: [
PersonTabContent<PatientField>(
PatientField.firstName,
)
])))));
}
}
然后上面调用的 Widget 看起来像(无论如何是简化版):
class PersonTabContent<T> extends StatelessWidget {
const PersonTabContent(
this.firstNameField, {
Key? key,
}) : super(key: key);
final T Function(String) firstNameField;
@override
Widget build(BuildContext context) {
print(firstNameField('something'));
return Padding(
padding: EdgeInsets.all(doubleBySize(context, 32)),
);
}
}
查看输出,上面打印出:
PatientField.firstName(value: something)
null
我不明白为什么我在第二个 Widget 的构建方法中得到一个空值。关于我做错了什么的任何见解?
像往常一样,这是我的错。对于任何遇到这个问题的人来说,问题出在我的版本上。构造函数 tear-offs 最近才实现,我仍在我的 pubspec.yaml 文件中指定 dart 2.15.0。对于其他 运行 遇到此问题的人,请检查您的 pubspec.yaml 文件并确保顶部如下所示:
name: a_new_flutter_project
description: A new Flutter project.
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.16.0 <3.0.0"
应该就是这样。
标题说的是什么。我有一个冻结的构造函数 tear-off,我正试图将其传递给 Widget,但它没有返回 null,我正试图弄清楚我做错了什么。这是冻结的 class:
@freezed
class PatientField with SetFieldOption, _$PatientField {
factory PatientField.firstName(String value) = PatientFirstName;
}
这是我最初的 Widget 的简化版本(实际显示正确):
class SinglePatientView2 extends ConsumerWidget {
const SinglePatientView2({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
print(PatientField.firstName('something'));
return Theme(
data: Theme.of(context).copyWith(dividerColor: Colors.transparent),
child: Expanded(
child: DefaultTabController(
length: 1,
child: Scaffold(
body: TabBarView(children: [
PersonTabContent<PatientField>(
PatientField.firstName,
)
])))));
}
}
然后上面调用的 Widget 看起来像(无论如何是简化版):
class PersonTabContent<T> extends StatelessWidget {
const PersonTabContent(
this.firstNameField, {
Key? key,
}) : super(key: key);
final T Function(String) firstNameField;
@override
Widget build(BuildContext context) {
print(firstNameField('something'));
return Padding(
padding: EdgeInsets.all(doubleBySize(context, 32)),
);
}
}
查看输出,上面打印出:
PatientField.firstName(value: something)
null
我不明白为什么我在第二个 Widget 的构建方法中得到一个空值。关于我做错了什么的任何见解?
像往常一样,这是我的错。对于任何遇到这个问题的人来说,问题出在我的版本上。构造函数 tear-offs 最近才实现,我仍在我的 pubspec.yaml 文件中指定 dart 2.15.0。对于其他 运行 遇到此问题的人,请检查您的 pubspec.yaml 文件并确保顶部如下所示:
name: a_new_flutter_project
description: A new Flutter project.
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.16.0 <3.0.0"
应该就是这样。