NoSuchMethodError:null 上的无效成员:'length'
Posted
技术标签:
【中文标题】NoSuchMethodError:null 上的无效成员:\'length\'【英文标题】:NoSuchMethodError: Invalid member on null:'length'NoSuchMethodError:null 上的无效成员:'length' 【发布时间】:2021-07-18 18:28:30 【问题描述】:我尝试按日期过滤交易。用户选择日期后,将自动过滤数据,但出现 NoSuchMethodError: Invalid member on null:'length' 错误。 我知道列表有问题,但我不确定,因为我传递值的方式或比较日期的方式。 该列表通过 GET 请求从 DB 获取数据。我测试了 GET 请求并在无状态小部件上显示数据,它运行良好。
class BudgetDateRangePicker extends StatefulWidget
final isSelected = <bool>[true, false];
final List<Transaction> transactions;
BudgetDateRangePicker(Key key, this.transactions) : super(key: key);
@override
State<StatefulWidget> createState() => _BudgetDateRangePickerState();
class _BudgetDateRangePickerState extends State<BudgetDateRangePicker>
DateTime _toDate = DateTime.now();
DateTime _fromDate = DateTime.utc(2020, 1, 1);
List<Transaction> trans;
Future<void> _selectDate(BuildContext context) async
final List<DateTime> picked = await DateRangePicker.showDatePicker(
context: context,
initialLastDate: new DateTime.now(),
initialFirstDate: (new DateTime.utc(2020, 1, 1)),
firstDate: new DateTime(2015),
lastDate: new DateTime(DateTime.now().year + 2));
if (picked != null && picked.length == 2)
setState(()
_fromDate = picked[0];
_toDate = picked[1];
for (var item in widget.transactions)
if (DateTime.parse(item.date).isBefore(_toDate) &&
DateTime.parse(item.date).isAfter(_fromDate))
trans.add(item);
);
@override
Widget build(BuildContext context)
return Row(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
Container(
margin: const EdgeInsets.only(right: 10),
child: Text("From: $DateFormat.yMMMd().format(_fromDate)")),
Container(
margin: const EdgeInsets.only(right: 10),
child: Text("To: $DateFormat.yMMMd().format(_toDate)"),
),
Container(
margin: const EdgeInsets.only(right: 10),
child: RaisedButton(
color: Colors.green[200],
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(6.0),
side: BorderSide(color: Colors.white),
),
onPressed: () => _selectDate(context),
child: Text('Select date'),
),
),
ListView.separated(
separatorBuilder: (context, index)
return Divider(color: Colors.grey[400]);
,
itemCount: trans.length, // this one has error
itemBuilder: (context, index)
final transaction = trans[index];
return ListTile(
contentPadding: EdgeInsets.all(10),
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("$transaction.category",
style:
TextStyle(fontSize: 24, fontWeight: FontWeight.w500)),
Text("$transaction.date",
style: TextStyle(color: Colors.grey[500], fontSize: 14)),
]),
trailing: Column(children: <Widget>[
Text("$transaction.amount",
style: TextStyle(fontSize: 24, fontWeight: FontWeight.w500)),
]),
);
,
)
]);
Future<List<Transaction>> fetchBudgetTrans(http.Client client) async
final response =
await client.get(Uri.parse('http://127.0.0.1:8000/budget/trans'));
return compute(parseDataBudget, response.body);
【问题讨论】:
【参考方案1】:尝试初始化您的列表,因此如果没有应用过滤器,则不会导致空引用错误
List<Transaction> trans = [];
【讨论】:
如果解决了您的问题,请接受答案(将问题标记为已回答)。 抛出了另一个异常:无效参数:null,我从 ```new FutureBuilder>(future: fetchBudgetTrans(new http.Client()),```得到了这个错误以上是关于NoSuchMethodError:null 上的无效成员:'length'的主要内容,如果未能解决你的问题,请参考以下文章
NoSuchMethodError:null 上的无效成员:'toList'(Flutter Web)_MapStream<QuerySnapshot 引发了异常
Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web
NoSuchMethodError(NoSuchMethodError:方法'[]'在null上被调用。接收者:null尝试调用:[](“title”))
NoSuchMethodError (NoSuchMethodError: 方法 'map' 在 null 上被调用
例外:NoSuchMethodError:在 null 上调用了 getter 'uid'。接收方:null 尝试调用:uid
Flutter:NoSuchMethodError:方法 'fetchByID' 在 null 上被调用。接收方:null 尝试调用:fetchByID(2)