Умножьте значения ЦОД и пользовательского ввода в другом ЦОД и отобразите значение в третьем флаттере ЦОД.

У меня есть таблица данных, динамически заполняемая из коллекции firebase. Есть название предмета и цена, я хочу, чтобы пользователь вводил количество, и общая сумма (цена * количество) автоматически рассчитывается в другом центре данных. Я не уверен, как добавить texteditingcontroller к каждому количеству для каждой базы данных. Когда я попытался добавить TextEditingController, он применился ко всем дата-центрам. Мне нужно выполнить расчет для каждого символа данных.

      
class _FeedTablesState extends State<FeedTables> {
  final myController = TextEditingController();

   void _printLatestValue() {
     print('Second text field: ${myController.text}');
   }

   @override
   void initState() {
     super.initState();

     // Start listening to changes.
     myController.addListener(_printLatestValue);
   }

  @override
  Widget _buildBody(BuildContext context) {
    return Material(
      child: StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance.collection('Items').snapshots(),
      builder: (context, snapshot) {
          if (!snapshot.hasData) return LinearProgressIndicator();
          return DataTable2(
              columns: [
                DataColumn(label: Text('Name')),
                DataColumn(label: Text('Price ')),
                DataColumn(label: Text('Quantity')),
                DataColumn(label: Text('Total')),

                // DataColumn(label: Text('Rapper\nname')),
              ],
              rows: _buildList(context, snapshot.data!.docs)
          );
        },
      ),
    );
  }

  List<DataRow> _buildList(BuildContext context, List<DocumentSnapshot> snapshot) {
    return  snapshot.map((data) => _buildListItem(context, data)).toList();
  }

  DataRow _buildListItem(BuildContext context, DocumentSnapshot data) {
    final record = Record.fromSnapshot(data);

    return DataRow(cells: [
      DataCell(Text(record.name.toString())),
      DataCell(Text(record.price.toString())),
      DataCell(TextField(
                    controller: myController,
                    maxLength: 4,
                    decoration: InputDecoration(
                      labelText: 'Qty',
                      labelStyle: TextStyle(fontSize: 9),
                      counterText: "",
                    ),
                  ),),
      DataCell(Text((record.price.toString()))),

      // DataCell(Text(record.total_quantity.toString())),
    ]);
  }

  @override
  Widget build(BuildContext context) {

    return _buildBody(context);
  }
}


class Record {
  final String name;
  final String price;
  final String quantity;
  final DocumentReference reference;

  Record.fromMap(Map<String, dynamic> map, {required this.reference})
      : assert(map['name'] != null),
        assert(map['price'] != null),
        assert(map['quantity'] != null),
        name = map['name'],
        price = map['price'],
        quantity = map['quantity'];

  Record.fromSnapshot(DocumentSnapshot snapshot)
      : this.fromMap(snapshot.data() as Map<String, dynamic>, reference: snapshot.reference);

  @override
  String toString() => "Record<$name:$price:$quantity:>";
}

0 ответов

Другие вопросы по тегам