簡體   English   中英

如何修改 flutter 中 DataRow 的值?

[英]How do i modify the value of DataRow in flutter?

我有一個 2 DataRow,我從 firebase 數據庫查詢,我想將 qty 的值乘以總的值,我在變量 qty 中有 1 的值,如下所示int qty = 1; 在我的代碼中作為默認數量。

在此處輸入圖像描述

例如,Qty 的值為 1 乘以 total 的值,如下面的示例代碼所示。

Container _itemTatble() {
return Container(
  width: MediaQuery.of(context).size.width,
  padding: const EdgeInsets.only(top: 10, right: 8, left: 8),
  child: Scrollbar(
    thumbVisibility: true,
    trackVisibility: true,
    child: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        reverse: true,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            SingleChildScrollView(
                scrollDirection: Axis.horizontal,
                reverse: true,
                child: buildDataTable()),
          ],
        )),
  ),
);}


     Widget buildDataTable() {
return StreamBuilder(
    stream: FirebaseFirestore.instance
        .collection('Products')
        .snapshots(includeMetadataChanges: true),
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      if (snapshot.hasError) {
        return Text('Something went wrong! ${snapshot.error}');
      } else if (snapshot.hasData) {
        final columns = ['Items', 'Price', 'Qty', 'Total'];
        return DataTable(
            columnSpacing: 350,
            showCheckboxColumn: false,
            columns: getcolumns(columns),
            rows: _createRows(snapshot.data));
      } else {
        return const Center(child: CircularProgressIndicator());
      }
    });}   


List<DataColumn> getcolumns(List<String> columns) => columns
  .map((String column) => DataColumn(
      label: Text(column, style: Defaults.drawerTextBlacknormal)))
  .toList();



 List<DataRow> _createRows(QuerySnapshot snapshot) {
List<DataRow> newList = snapshot.docs.map((DocumentSnapshot document) {
  Map<String, dynamic> data = document.data()! as Map<String, dynamic>;   


  return DataRow(
    cells: [
      DataCell(Text(data['Items'].toString(),
          style: Defaults.drawerTextBlacknormal)),
      DataCell(Text(data['Price'].toString(),
          style: Defaults.drawerTextBlacknormal)),
      DataCell(
          TextFormField(
            initialValue: '${qty}',
            onChanged: (insertValue) => setState(() {
              qty = int.parse(insertValue);
            }),
          ),
          showEditIcon: true),
      DataCell(Text("${qty * data['Price']}",
          style: Defaults.drawerTextBlacknormal)),
    ],
    onSelectChanged: ((bool? selected) =>
        selected == null ? selected = false : selected = true),
  );
}).toList();
return newList;
}  

現在。 我可以成功修改 qty 的值並將其乘以總值,但我的問題是。修改也適用於第二行,如此處所示。

在此處輸入圖像描述

我該如何解決這個問題,以便可以單獨修改每一行? 如果有人知道如何克服這個問題,請提供幫助。 感謝

您需要創建/維護一個數量列表,即List<int> qty = []; qty (或 Map 的qty類似於Map<SomeUniqueKey, int> )而不是int qty = 1; 跟蹤單個文本字段。

因此,如果有 10 條記錄,則 10 qty並將列表中正確的qtydata[price]相乘。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM