[英]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
並將列表中正確的qty
與data[price]
相乘。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.