Search code examples
flutterlistviewrowmultiple-columnscalculated-columns

How do i add 1 more column to this score sheet PIC attached of what i was expecting All the maths is good just need to duplicate


I have made 1 scoring sheet, but we have 2 rounds so I need x 2 next to each other I was looking at cells and columns, but not sure what to use or how to implement them into the code.

Code and screenshot of what I'm after - thanks all.

enter image description here

Code

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final appTitle = 'Twin City Bowmen Score Sheet';

    return MaterialApp(
      title: appTitle,
      home: Scaffold(
        appBar: AppBar(
          title: Text(appTitle),
        ),
        body: AddTwoNumbers(),
      ),
    );
  }
}

class AddTwoNumbers extends StatefulWidget {
  @override
  _AddTwoNumbersState createState() => _AddTwoNumbersState();
}

class _AddTwoNumbersState extends State<AddTwoNumbers> {
  TextEditingController num1controller = new TextEditingController();
  TextEditingController num2controller = new TextEditingController();
  TextEditingController num3controller = new TextEditingController();
  TextEditingController num4controller = new TextEditingController();
  TextEditingController num5controller = new TextEditingController();
  TextEditingController num6controller = new TextEditingController();
  TextEditingController num7controller = new TextEditingController();
  TextEditingController num8controller = new TextEditingController();
  TextEditingController num9controller = new TextEditingController();
  TextEditingController num10controller = new TextEditingController();
  TextEditingController num11controller = new TextEditingController();
  TextEditingController num12controller = new TextEditingController();
  TextEditingController num13controller = new TextEditingController();
  TextEditingController num14controller = new TextEditingController();
  TextEditingController num15controller = new TextEditingController();
  TextEditingController num16controller = new TextEditingController();
  TextEditingController num17controller = new TextEditingController();
  TextEditingController num18controller = new TextEditingController();
  TextEditingController num19controller = new TextEditingController();
  TextEditingController num20controller = new TextEditingController();
  String result = "0";
  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Container(
        child: Column(
          children: <Widget>[
            Row(
              children: <Widget>[
                Text("Target 1:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num1controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 2:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num2controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 3:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num3controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 4:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num4controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 5:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num5controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 6:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num6controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 7:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num8controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 8:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num9controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 9:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num10controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 10:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num11controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 11:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num12controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 12:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num13controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 13:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num14controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 14:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num15controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 15:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num16controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 16:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num17controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 17:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num18controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 18:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num19controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 19:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num20controller,
                  ),
                ),
              ],
            ),
            Row(
              children: <Widget>[
                Text("Target 20:"),
                new Flexible(
                  child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: num7controller,
                  ),
                ),
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                ElevatedButton(
                  child: Text("Add"),
                  onPressed: () {
                    setState(() {
                      int sum = int.parse(num1controller.text) +
                          int.parse(num2controller.text) +
                          int.parse(num3controller.text) +
                          int.parse(num4controller.text) +
                          int.parse(num5controller.text) +
                          int.parse(num6controller.text) +
                          int.parse(num7controller.text) +
                          int.parse(num8controller.text) +
                          int.parse(num9controller.text) +
                          int.parse(num10controller.text) +
                          int.parse(num11controller.text) +
                          int.parse(num12controller.text) +
                          int.parse(num13controller.text) +
                          int.parse(num14controller.text) +
                          int.parse(num15controller.text) +
                          int.parse(num16controller.text) +
                          int.parse(num17controller.text) +
                          int.parse(num18controller.text) +
                          int.parse(num19controller.text) +
                          int.parse(num20controller.text);
                      result = sum.toString();
                    });
                  },
                )
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  "Result:",
                  style: TextStyle(
                    fontSize: 30,
                  ),
                ),
                Text(
                  result,
                  style: TextStyle(
                    fontSize: 30,
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

I have tried the above with cells and columns but I just get to many errors to work out where I'm going wrong sorry for the newbie mistakes.


Solution

  • See you just need a row and column and putting all the textfields and title will do your job.

    Rather i have made you some improvements as used a list of TextEditingController rather sepreate variables and ListView.builders rather than taking a separate text and textfield 20 times.

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MaterialApp(home: AddTwoNumbers()));
    }
    
    class AddTwoNumbers extends StatefulWidget {
      const AddTwoNumbers({super.key});
    
      @override
      State<AddTwoNumbers> createState() => _AddTwoNumbersState();
    }
    
    class _AddTwoNumbersState extends State<AddTwoNumbers> {
      List<TextEditingController> roundOneFields = [];
      List<TextEditingController> roundTwoFields = [];
      int roundOneResult = 0;
      int roundTwoResult = 0;
    
      @override
      void initState() {
        roundOneFields =
            List.generate(20, (index) => TextEditingController(text: '0'));
        roundTwoFields =
            List.generate(20, (index) => TextEditingController(text: '0'));
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: SingleChildScrollView(
            child: Column(
              children: <Widget>[
                Row(
                  children: [
                    Expanded(
                      child: ListView.builder(
                        itemCount: 20,
                        shrinkWrap: true,
                        itemBuilder: (context, index) => Row(
                          children: <Widget>[
                            Text("R1 Target ${index + 1}:"),
                            Flexible(
                              child: TextField(
                                decoration: const InputDecoration(
                                    contentPadding:
                                        EdgeInsets.symmetric(horizontal: 8)),
                                keyboardType: TextInputType.number,
                                controller: roundOneFields[index],
                              ),
                            ),
                          ],
                        ),
                        physics: const BouncingScrollPhysics(),
                      ),
                    ),
                    const SizedBox(
                      width: 24,
                    ),
                    Expanded(
                      child: ListView.builder(
                        itemCount: 20,
                        shrinkWrap: true,
                        physics: const BouncingScrollPhysics(),
                        itemBuilder: (context, index) => Row(
                          children: <Widget>[
                            Text("R2 Target ${index + 1}:"),
                            Flexible(
                              child: TextField(
                                decoration: const InputDecoration(
                                    contentPadding:
                                        EdgeInsets.symmetric(horizontal: 8)),
                                keyboardType: TextInputType.number,
                                controller: roundTwoFields[index],
                              ),
                            ),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    ElevatedButton(
                      child: const Text("Add"),
                      onPressed: () {
                        setState(() {
                          roundOneFields.forEach((e) =>
                              roundOneResult = roundOneResult + int.parse(e.text));
                          roundTwoFields.forEach((e) => roundTwoResult =
                              roundTwoResult + int.parse(e.text.toString()));
                        });
                      },
                    )
                  ],
                ),
                Text(
                  "Result \n Round 1: $roundOneResult and Round 2: $roundTwoResult",
                  textAlign: TextAlign.center,
                  style: const TextStyle(
                    fontSize: 30,
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }