如何检查数组是否为空,如果为空则显示不可用



不幸的是,我的控制台显示一个"方法'[]'是在null上调用的。"当我试图显示一个产品页面时出错,该页面中的产品没有以下数组作为Firestore中的选项。有没有办法检查数组是否为空值,并在数组不在Firestore中时显示"Product Personalization Not Available"。当productPersonalization列表可用时,以下代码可以正常工作。

import 'package:fj_trade/constants.dart';
import 'package:flutter/material.dart';
class ProductPersonalisation extends StatefulWidget {

final List productPersonalisation;
final Function(String) onSelected;

const ProductPersonalisation({Key key, this.productPersonalisation, this.onSelected}) : super(key: key);
@override
_ProductPersonalisationState createState() => _ProductPersonalisationState();
}
class _ProductPersonalisationState extends State<ProductPersonalisation> {
int _selected = 0;

@override
Widget build(BuildContext context) {
return Row(
children: [

for(var  i=0; i < widget.productPersonalisation.length; i++)
GestureDetector(
onTap: () {
widget.onSelected("${widget.productPersonalisation[i]}");
setState(() {
_selected = i;
});
},
child: Container(
padding: EdgeInsets.symmetric(horizontal: 0.0),
height: 42,
decoration: BoxDecoration(
color: _selected == i ? Theme.of(context).accentColor : Constants.lightGrey,
borderRadius: BorderRadius.circular(4),
),
alignment: Alignment.center,
margin: EdgeInsets.only(
right: 6.0,
),
child: Text("${widget.productPersonalisation[i]}",
style: TextStyle(
fontWeight: FontWeight.w600,
color: _selected == i ? Colors.white : Colors.black87,
),
),
),
),
],
);
}
}

如果数组中的元素为空,则可以执行此操作

widget.onSelected("${widget.productPersonalisation[i] ?? 'Product Personalisation Not Available'}");

但是,在循环之前,您应该检查widget.productPersonalization是否为null。

如果您试图访问空列表的索引,它将引发异常。试试这个:

widget.onSelected(widget.productPersonalisation != null ? "${widget.productPersonalisation[i]}" : 'Product Personalisation Not Available');

最新更新