我目前正在测试如何实现一个仪表板页面,我在其中使用多个 StatefulWidget 制作一个页面,以便以后维护相当容易。我已经知道如何在 StatefulWidget 之间传递对象,但在将同一对象传递到另一个 StatefulWidget 构建内部的 StatefulWidget 时遇到问题。我在传递给子 StatefulWidget 的对象上收到一条错误消息“无效常量值”。我尝试更改子 StatefulWidget 的构造函数,例如删除对象参数所需的参数或使构造函数不是常量,但它会导致该小部件出现其他类型的错误。现在,使用我当前的代码,我收到一条错误消息“错误:未定义名称‘小部件’。”在 ShippingDocPage(user: widget.user) 行上。支架主体的 widget 变量会消失吗?
这是我的代码:
class DashboardPage extends StatefulWidget {
final User user;
const DashboardPage({super.key, required this.user});
@override
State<DashboardPage> createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
var appBarTitleText = Text("Dashboard");
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(text: 'Tab1'),
Tab(text: 'Tab2'),
Tab(text: 'Tab3'),
],
),
title: Text(widget.user.userType!.displayName),//this works just fine
),
body: Column(
children: [
Container(
height: 150,
child: const Text('Vehicle Replace'),
),
Container(
height: 150,
child: const TabBarView(
children: [
ShippingDocPage(user: widget.user),//this is where the error shows
Icon(Icons.directions_transit),
Icon(Icons.directions_bike),
],
),
),
],
),
)
);
}
}
然后这是“子”StatefulWidget:
class ShippingDocPage extends StatefulWidget {
final User user;
const ShippingDocPage({super.key, required this.user});
@override
State<ShippingDocPage> createState() => _ShippingDocPageState();
}
class _ShippingDocPageState extends State<ShippingDocPage> {
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
title: Text('Shipping Documents'),
),
body: Column(
children: [
Container(
height: 150,
child: Text(widget.user.userType!.displayName),
),
],
),
)
);
}
}
class DashboardPage extends StatefulWidget {
final User user;
const DashboardPage({super.key, required this.user});
@override
State<DashboardPage> createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
var appBarTitleText = Text("Dashboard");
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(text: 'Tab1'),
Tab(text: 'Tab2'),
Tab(text: 'Tab3'),
],
),
title: Text(widget.user.userType!.displayName), // This works just fine
),
body: Column(
children: [
Container(
height: 150,
child: const Text('Vehicle Replace'),
),
Container(
height: 150,
child: TabBarView(
children: [
ShippingDocPage(user: widget.user), // Remove const here
Icon(Icons.directions_transit),
Icon(Icons.directions_bike),
],
),
),
],
),
),
);
}
}
class ShippingDocPage extends StatefulWidget {
final User user;
const ShippingDocPage({super.key, required this.user});
@override
State<ShippingDocPage> createState() => _ShippingDocPageState();
}
class _ShippingDocPageState extends State<ShippingDocPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Shipping Documents'),
),
body: Column(
children: [
Container(
height: 150,
child: Text(widget.user.userType!.displayName),
),
],
),
);
}
}