在以下代码中,你会看到我在选项卡栏中有三个选项卡。分别是Analytics(分析)、Quality Control(质量控制)和Inventory(库存)。
当你不访问第三个选项卡时,前两个选项卡都能正常工作。但是当你转到第三个选项卡时,你会发现选项卡的内容会以奇怪的方式扩展宽度,并且内容也会超出屏幕限制。这并不会在调试控制台中引发任何错误。
另外,如果你转到另一个页面然后再返回第三个页面,这个问题就会解决,内容大小也会恢复正常。以下是它的样子: 这是内容被拉伸的屏幕样式 这是屏幕应该呈现的样子 以下是Dashboard的代码:
这是库存屏幕的代码(我说的第三个选项卡):
此外,这里还有其他屏幕的代码,供参考比较:
我尝试将第三个选项卡的ListView.builder更改为SingleChildScrollView,但没有任何变化。
编辑:我将第三个选项卡的内容替换为一个文本小部件,问题仍然存在。我不认为这与页面的内容有关。
另外,只有在有3个选项卡的情况下才会出现这个问题。我尝试了2、4、5个选项卡,没有问题。
当你不访问第三个选项卡时,前两个选项卡都能正常工作。但是当你转到第三个选项卡时,你会发现选项卡的内容会以奇怪的方式扩展宽度,并且内容也会超出屏幕限制。这并不会在调试控制台中引发任何错误。
另外,如果你转到另一个页面然后再返回第三个页面,这个问题就会解决,内容大小也会恢复正常。以下是它的样子: 这是内容被拉伸的屏幕样式 这是屏幕应该呈现的样子 以下是Dashboard的代码:
class DashboardScreen extends StatelessWidget {
static const String routeName = '/dashboard';
const DashboardScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
title: const Text('Dashboard'),
centerTitle: true,
bottom: const TabBar(
tabs: [
Tab(
text: 'Overview',
icon: Icon(Icons.analytics),
),
Tab(
text: 'QC History',
icon: Icon(Icons.verified_user),
),
Tab(
text: 'Inventory Stock',
icon: Icon(Icons.inventory),
),
],
),
),
body: TabBarView(
children: [
const AnalyticsScreen(),
const QualityControlScreen(),
InventoryScreen(),
],
),
),
);
}
}
这是库存屏幕的代码(我说的第三个选项卡):
class InventoryScreen extends StatelessWidget {
static const String routeName = '/inventory';
InventoryScreen({Key? key}) : super(key: key);
// Dummy data representing items in the factory's inventory
final List<InventoryItem> inventoryItems = [
InventoryItem(
name: 'Item A',
quantity: 10,
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
),
InventoryItem(
name: 'Item B',
quantity: 5,
description:
'Ut enim ad minim veniam, quis nostrud exercitation ullamco.',
),
InventoryItem(
name: 'Item C',
quantity: 15,
description: 'Duis aute irure dolor in reprehenderit in voluptate velit.',
),
];
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: inventoryItems.length,
itemBuilder: (context, index) {
final item = inventoryItems[index];
return CustomCardWidget(
child: Column(
children: [
ListTile(
title: Text(item.name),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Quantity: ${item.quantity}'),
const SizedBox(height: 4),
Text(item.description),
],
),
onTap: () {
// TODO: Handle tapping on an inventory item
},
),
const SizedBox(height: 8),
LinearProgressIndicator(
value: item.quantity / 100,
),
const SizedBox(height: 8),
SizedBox(
height: 200,
child: SfCartesianChart(
primaryXAxis: CategoryAxis(),
series: <ChartSeries>[
ColumnSeries<InventoryItem, String>(
dataSource: [item],
xValueMapper: (InventoryItem item, _) => item.name,
yValueMapper: (InventoryItem item, _) => item.quantity,
color: Colors.blue,
),
],
),
),
],
),
);
},
);
}
}
此外,这里还有其他屏幕的代码,供参考比较:
class QualityControlScreen extends StatelessWidget {
static const String routeName = '/quality-control';
const QualityControlScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
QualityControlItem(
testId: 'QC001',
testName: 'Test A',
status: QualityControlStatus.passed,
),
QualityControlItem(
testId: 'QC002',
testName: 'Test B',
status: QualityControlStatus.failed,
),
QualityControlItem(
testId: 'QC003',
testName: 'Test C',
status: QualityControlStatus.pending,
),
],
),
),
);
}
}
class AnalyticsScreen extends StatelessWidget {
const AnalyticsScreen({super.key});
@override
Widget build(BuildContext context) {
return const SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ProductionProgress(),
Attendance(),
InventoryStock(),
QualityControlHistory(),
],
),
),
);
}
}
我尝试将第三个选项卡的ListView.builder更改为SingleChildScrollView,但没有任何变化。
编辑:我将第三个选项卡的内容替换为一个文本小部件,问题仍然存在。我不认为这与页面的内容有关。
另外,只有在有3个选项卡的情况下才会出现这个问题。我尝试了2、4、5个选项卡,没有问题。