как обновить 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)),
  };
}

 

0 ответов

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