Flutter, how to get parameter value of statefulwidget from another statefulwidget?

Viewed 28

I have 2 StatefulWidget classes. One of them is a order class and other is orderlist class. In orderlist, I have many of orders. Problem is, I want to access a value of order from orderlist. Order codes:

class OrderWidget extends StatefulWidget {
  final TextEditingController priceController = TextEditingController();

  OrderWidget({Key? key}) : super(key: key);

  @override
  _OrderWidgetState createState() => _OrderWidgetState();
}

class _OrderWidgetState extends State<OrderWidget> {
  List<String> products = ["ürün 1", "ürün 2", "ürün 3"];
  String selectedValue = "ürün 1";
  TextEditingController pieceController = TextEditingController();
  TextEditingController noteController = TextEditingController();

  calculateTotal(String price) {
    var piece = pieceController.text;
    if (piece.isEmpty) {
      if (price.isNotEmpty) {
        var v = int.parse(price);
        setState(() {
          total += v;
        });
      }
    } else if (price.isNotEmpty) {
      var v = int.parse(price);
      var _piece = int.parse(piece);
      setState(() {
        total += v * _piece;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      width: MediaQuery.of(context).size.width * .9,
      child: Card(
        child: Column(
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  "Ürün:",
                  style: TextStyle(fontSize: 20),
                ),
                SizedBox(
                  width: MediaQuery.of(context).size.width * .04,
                ),
                CustomDropdownMenu(
                    defaultValue: selectedValue, values: products)
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  "Adet:",
                  style: TextStyle(fontSize: 20),
                ),
                SizedBox(
                  width: MediaQuery.of(context).size.width * .04,
                ),
                Container(
                  height: MediaQuery.of(context).size.height * .1,
                  width: MediaQuery.of(context).size.width * .4,
                  margin: EdgeInsets.only(
                      top: MediaQuery.of(context).size.height * .04),
                  child: TextField(
                    controller: pieceController,
                    keyboardType: TextInputType.number,
                    decoration: InputDecoration(
                      focusedBorder: OutlineInputBorder(
                        borderSide:
                            BorderSide(color: Colors.greenAccent, width: 5.0),
                      ),
                      enabledBorder: OutlineInputBorder(),
                      hintText: 'Adet',
                    ),
                  ),
                )
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  "Not:",
                  style: TextStyle(fontSize: 20),
                ),
                SizedBox(
                  width: MediaQuery.of(context).size.width * .04,
                ),
                Container(
                  height: MediaQuery.of(context).size.height * .1,
                  width: MediaQuery.of(context).size.width * .4,
                  margin: EdgeInsets.only(
                      top: MediaQuery.of(context).size.height * .04),
                  child: TextField(
                    controller: noteController,
                    keyboardType: TextInputType.multiline,
                    minLines: 1,
                    maxLines: 3,
                    decoration: InputDecoration(
                      focusedBorder: OutlineInputBorder(
                        borderSide:
                            BorderSide(color: Colors.greenAccent, width: 5.0),
                      ),
                      enabledBorder: OutlineInputBorder(),
                      hintText: 'Not',
                    ),
                  ),
                )
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  "Fiyat:",
                  style: TextStyle(fontSize: 20),
                ),
                SizedBox(
                  width: MediaQuery.of(context).size.width * .04,
                ),
                Container(
                  height: MediaQuery.of(context).size.height * .1,
                  width: MediaQuery.of(context).size.width * .4,
                  margin: EdgeInsets.only(
                      top: MediaQuery.of(context).size.height * .04),
                  child: TextField(
                    controller: widget.priceController,
                    onSubmitted: ((value) {
                      calculateTotal(value);
                    }),
                    keyboardType: TextInputType.number,
                    decoration: InputDecoration(
                      focusedBorder: OutlineInputBorder(
                        borderSide:
                            BorderSide(color: Colors.greenAccent, width: 5.0),
                      ),
                      enabledBorder: OutlineInputBorder(),
                      hintText: 'Fiyat',
                    ),
                  ),
                )
              ],
            ),
          ],
        ),
      ),
    );
  }
}

I have a list of that widget inside orderlist class. I want to access texteditingcontrollers of order. I tried to put a texteditingcontroller to constructor but I couldn't call it. What I want is exactly that:

for(var order in orderlistwidget){
  print(order.priceController);
}

I want to perform that code but how can I reach controllers?

0 Answers
Related