Код отображает элементы заказа в списке. Я вызвал класс в построителе списка.
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import '../providers/orders.dart' as ord;
class OrderItem extends StatefulWidget {
final ord.OrderItem order;
OrderItem(this.order);
@override
_OrderItemState createState() => _OrderItemState();
}
class _OrderItemState extends State<OrderItem> {
var _expanded = false;
@override
Widget build(BuildContext context) {
return Card(
margin: EdgeInsets.all(10),
child: Column(
children: <Widget>[
ListTile(
title: Text('Rs.${widget.order.amount.toStringAsFixed(2)}'),
subtitle: Text(
DateFormat('dd/MM/yyyy hh:mm').format(widget.order.dateTime),
),
trailing: IconButton(
icon: Icon(_expanded ? Icons.expand_less : Icons.expand_more),
onPressed: () {
setState(() {
_expanded = !_expanded;
});
},
),
),
if (_expanded)
Container(
padding: EdgeInsets.symmetric(vertical: 4, horizontal: 15),
height: min(widget.order.products.length * 20.0 + 10, 100),
child: ListView(
children: widget.order.products
.map(
(prod) => Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
(prod.title == null) ? "NULL": prod.title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
Text(
'${prod.quantity}x Rs.${prod.price}',
style: TextStyle(
fontSize: 18,
color: Colors.grey,
),
)
],
),
)
.toList(),
),
),
],
),
);
}
}
Я переключаюсь с расширенной переменной, чтобы отобразить больше информации, основанной на нажатии кнопки. Изначально проблем со сборкой не возникает, но когда расширенная переменная в изменилась на TRUE, она должна построить контейнер с названием продукта и ценой. Вместо этого выскакивает NoSuchMethodError. Я не уверен, почему. Никакой заголовок в моем json не имеет значения.
The getter 'title' was called on null.
Receiver: null
Tried calling: title
The relevant error-causing widget was
OrderItem
Json от firebase
flutter: {"-M0NrqH2mMcAVL5jpETk":{"amount":258.0,"dateTime":"2020-02-18T20:46:37.916189","products":[{"id":"-M0Nrla-o2doG3dnsV8Z","price":258.0,"quantity":1,"title":"test"}]},"-M0NxcXZWpDpILL56GgR":{"amount":516.0,"dateTime":"2020-02-18T21:11:54.544748","products":[{"id":"-M0Nrla-o2doG3dnsV8Z","price":258.0,"quantity":2,"title":"test"}]},"-M0Nxvi01cuwbjt2XYAk":{"amount":258.0,"dateTime":"2020-02-18T21:13:13.021139","products":[{"id":"-M0Nrla-o2doG3dnsV8Z","price":258.0,"quantity":1,"title":"test"}]},"-M2saQwrewiAyKuKXquN":{"amount":258.0,"dateTime":"2020-03-20T21:09:48.630353","products":[{"id":"-M0Nrla-o2doG3dnsV8Z","price":258.0,"quantity":1,"title":"test"}]}}
ПРИМЕЧАНИЕ. Однако в этом классе используется ТОЛЬКО список продуктов.