как обновить TextFields в DataTable при нажатии кнопки отправки во Flutter
введите описание изображения здесь . Я новичок в флаттере, я вызываю API и заполняю данные в DataTable, и в каждой строке есть одно поле TextFormField, которое является «количественным полем», пользователь может изменить значение TextFormField, мой вопрос: как я могу установить количество в TextFormField и я меняю количество в TextFormField и нажимаю кнопку SUBMIT, после чего мои обновленные данные DataTable сохраняются на сервере. Благодарю вас,
Мой код
импортировать «дротик: интерфейс»;
импортировать 'пакет: флаттер/material.dart';
импортировать «ответ/GetScanCodeDataResponse.dart»;
класс OrderListTable расширяет StatefulWidget { finalGetScanCodeDataResponse response1;
const OrderListTable(this.response1, {Key? key}): super(key: key);
@override State createState() =>_OrderListTableState(); }
класс _OrderListTableState расширяет состояние {
окончательный qtyController = TextEditingController();
@override Сборка виджета (контекст BuildContext) {
return Scaffold( appBar: AppBar( title: Text('Order List'), backgroundColor: Colors.lightBlueAccent, ), body: Container( child: Column( children: [ Padding( padding: const EdgeInsets.all(0.0), child: _OrderList2(widget.response1.data,qtyController), ), Expanded( child: Padding( padding: const EdgeInsets.only(left: 8.0,top: 0.0,bottom: 20.0,right: 8.0), child: Align( alignment: FractionalOffset.bottomCenter, child: InkWell( child: new Container( //width: 100.0, height: 60.0, decoration: new BoxDecoration( color: const Color(0xFFe66d0a), border: new Border.all( color: Colors.white, width: 1.0), borderRadius: new BorderRadius.circular(30.0), ), child: new Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( padding: const EdgeInsets.only(left: 30.0,), child: new Text( 'Submit', style: TextStyle( color: Colors.white, fontFamily: 'poppins_regular', fontSize: 18, letterSpacing: 2.0 ), ), ), new Icon(Icons.keyboard_arrow_right,size: 40.0,color: Colors.white,), ], ), ), ), ), ), ), ), ], ), ) ); } }
Widget _OrderList2(List<Datum> data, TextEditingController qtyController) {
return Row(
children: <Widget>[
//TODO: use Expanded here
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.all(8.0),
child: DataTable(
columnSpacing: 40,
columns: [
DataColumn(
label: Container(
width: 42, child: Text('Sr./No.',style: TextStyle(fontSize: 15.0),),),
),
DataColumn(
label: Container(
child: Text('Item Name',style: TextStyle(fontSize: 15.0),),),
),
DataColumn(
label: Text('Qty',style: TextStyle(fontSize: 15.0),),
),
DataColumn(
label: Text('UOM',style: TextStyle(fontSize: 15.0),),
),
DataColumn(
label: Text('Remark',style: TextStyle(fontSize: 15.0),),
),
],
rows: [
for(var i=0; i<data[0].item.length; i++) DataRow(
cells: [
DataCell(
Center(child: Text(data[0].item[i].srNo.toString(),)),
),
DataCell(
Center(
child: Text(
data[0].item[i].itemName.toString()),
),
),
DataCell(
Center(child:
TextFormField(
keyboardType: TextInputType.numberWithOptions(),
maxLength: 5,
maxLines: 1,
initialValue: data[0].item[i].qty.toString(),
decoration: InputDecoration(
border:UnderlineInputBorder(),
counterText: "",
hintText: 'Qty',
),
onChanged: (value) {
print("The value entered is : $value");
}
),
),
),
DataCell(
Center(child: Text(data[0].item[i].uom.toString())),
),
DataCell(
Center(child: Text(data[0].item[i].remarks.toString())),
),
],
),
],
),
),
),
],
);
}
Класс ответа
import 'dart:convert';
GetScanCodeDataResponse getScanCodeDataResponseFromJson(String str) => GetScanCodeDataResponse.fromJson(json.decode(str));
String getScanCodeDataResponseToJson(GetScanCodeDataResponse data) => json.encode(data.toJson());
class GetScanCodeDataResponse {
GetScanCodeDataResponse({
required this.settings,
required this.data,
});
Settings settings;
List<Datum> data;
factory GetScanCodeDataResponse.fromJson(Map<String, dynamic> json) => GetScanCodeDataResponse(
settings: Settings.fromJson(json["settings"]),
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"settings": settings.toJson(),
"data": List<dynamic>.from(data.map((x) => x.toJson())),
};
}
class Datum {
Datum({
required this.poDate,
required this.poNo,
required this.supplierName,
required this.item,
});
String poDate;
String poNo;
String supplierName;
List<Item> item;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
poDate: json["PO Date"],
poNo: json["PO No"],
supplierName: json["Supplier Name"],
item: List<Item>.from(json["item"].map((x) => Item.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"PO Date": poDate,
"PO No": poNo,
"Supplier Name": supplierName,
"item": List<dynamic>.from(item.map((x) => x.toJson())),
};
}
class Item {
Item({
required this.srNo,
required this.itemName,
required this.qty,
required this.uom,
required this.remarks,
});
String srNo;
String itemName;
String qty;
String uom;
String remarks;
factory Item.fromJson(Map<String, dynamic> json) => Item(
srNo: json["Sr No"],
itemName: json["Item Name"],
qty: json["Qty"],
uom: json["UOM"],
remarks: json["Remarks"],
);
Map<String, dynamic> toJson() => {
"Sr No": srNo,
"Item Name": itemName,
"Qty": qty,
"UOM": uom,
"Remarks": remarks,
};
}
class Settings {
Settings({
required this.success,
required this.message,
required this.fields,
});
String success;
String message;
List<String> fields;
factory Settings.fromJson(Map<String, dynamic> json) => Settings(
success: json["success"],
message: json["message"],
fields: List<String>.from(json["fields"].map((x) => x)),
);
Map<String, dynamic> toJson() => {
"success": success,
"message": message,
"fields": List<dynamic>.from(fields.map((x) => x)),
};
}