Untitled

 avatar
unknown
plain_text
16 days ago
20 kB
3
Indexable
import 'package:flutter/material.dart';
import 'dashboard_page.dart.';

class DataEntryPage extends StatefulWidget {
  @override
  _DataEntryPageState createState() => _DataEntryPageState();
}
class _DataEntryPageState extends State<DataEntryPage> {
  // Place the MF Map here (inside the class but before any methods)
  Map<String, double> calculatedValues = {}; // Store calculated values
  Map<String, String> calculatedResults = {};
  final Map<String, double> commonParamMFs = {
    "66KV": 1.732,
    "11KV": 1.732,
    "66KV PF": 1.0,
    "11KV PF": 1.0,
    "Frequency": 1.0,
  };
// Store controllers for each input field
  Map<String, TextEditingController> controllers = {};
  void _calculateAndUpdate(String param) {
    double inputValue = double.tryParse(controllers[param]!.text) ?? 0.0;
    double calculatedValue = inputValue * (commonParamMFs[param] ?? 1.0);

    setState(() {
      calculatedValues[param] = calculatedValue; // Store result separately
    });

    print("Input for $param: $inputValue");
    print("Calculated Value: $calculatedValue");
  }
  @override
  void initState() {
    super.initState();
    // Initialize controllers for each common parameter
    for (var param in commonParamMFs.keys) {
      controllers[param] = TextEditingController();
    }
  }
  bool isSaved = false;
  int _selectedIndex = 1;
  DateTime _currentDateTime = DateTime.now();  // Current date and time

  void _onItemTapped(int index) {
    if (index != _selectedIndex) {
      late Widget nextPage;

      switch (index) {
        case 0:
          nextPage = DashboardPage();
          break;
        case 1:
          nextPage = DataEntryPage();  // This needs to refer to the actual DataEntryPage class
          break;
        default:
          return; // Exit if index is not 0 or 1
      }

      Navigator.pushReplacement(
        context,
        MaterialPageRoute(builder: (context) => nextPage),
      );
    }
  }

// Function to round the time to the nearest hour
  String getRoundedTime() {
    DateTime roundedTime = DateTime(
      _currentDateTime.year,
      _currentDateTime.month,
      _currentDateTime.day,
      _currentDateTime.hour, // The hour value is kept, minute is discarded
    );
    return "${roundedTime.hour.toString().padLeft(2, '0')}:00"; // Format time as "HH:00"
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          "SubTrack Data Entry",
          style: TextStyle(
            fontSize: 28,
            fontWeight: FontWeight.bold,
            fontFamily: 'Rajdhani',
            color: Colors.white,
          ),
        ),
        backgroundColor: Color(0xFF282833),
      ),
      //Bottomnavbar building
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        backgroundColor: Color(0xFF282833),
        selectedItemColor: Color(0xFFF3B600),
        unselectedItemColor: Colors.white.withOpacity(0.7),
        selectedLabelStyle: TextStyle(
          fontSize: 14,
          fontFamily: 'Rajdhani',
          fontWeight: FontWeight.bold,
        ),
        unselectedLabelStyle: TextStyle(
          fontSize: 12,
          fontFamily: 'Rajdhani',
          fontWeight: FontWeight.bold,
        ),
        currentIndex: _selectedIndex,
        onTap: _onItemTapped,
        items: [
          BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
          BottomNavigationBarItem(icon: Icon(Icons.edit), label: "Data Entry"),
          BottomNavigationBarItem(icon: Icon(Icons.calculate), label: "Losses"),
          BottomNavigationBarItem(icon: Icon(Icons.history), label: "History"),
        ],
      ),
      backgroundColor: Color(0xFF282833),
      body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              // Displaying Date on the Left and Time on the Right
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Text(
                    "${_currentDateTime.toLocal()}".split(' ')[0],  // Displaying only the date
                    style: TextStyle(color: Colors.blue, fontSize: 18, fontWeight: FontWeight.bold),
                  ),
                  Text(
                    "Time: [ ${getRoundedTime()} ]",
                    style: TextStyle(color: Colors.blue, fontSize: 18, fontWeight: FontWeight.bold),
                  ),
                ],
              ),
              SizedBox(height: 20),
              _buildCommonParameters(),
              _build66KVLinesSection(),
              _buildAllOtherPanelsSection(),
              _buildLTMeterAnd11KVStation(),
              SizedBox(height: 20),
              // Row with Save and Modify Buttons
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: () {
                      setState(() {
                        isSaved = true;
                      });
                    },
                    child: Text(
                      "Save Data",
                      style: TextStyle(
                        color: Colors.white,
                        fontWeight: FontWeight.bold,
                        fontSize: 16,
                      ),
                    ),
                    style: ElevatedButton.styleFrom(
                      backgroundColor: Colors.green,  // Button background color
                      padding: EdgeInsets.symmetric(vertical: 15, horizontal: 30),
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(20),
                      ),
                      elevation: 5,
                    ),
                  ),
                  SizedBox(width: 20),
                  if (isSaved)
                    ElevatedButton(
                      onPressed: () {},
                      child: Text(
                        "Modify",
                        style: TextStyle(
                          color: Colors.white,
                          fontWeight: FontWeight.bold,
                          fontSize: 16,
                        ),
                      ),
                      style: ElevatedButton.styleFrom(
                        backgroundColor: Colors.orange,
                        padding: EdgeInsets.symmetric(vertical: 15, horizontal: 30),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(20),
                        ),
                        elevation: 5,
                      ),
                    ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
//common parameters building (independent)
  Widget _buildCommonParameters() {
    List<String> commonParams = ["66KV", "11KV", "66KV PF", "11KV PF", "Frequency"];
    Map<String, double> mfValues = {  // Define multiplication factors
      "66KV": 1.732,
      "11KV": 1.732,
      "66KV PF": 1.0,
      "11KV PF": 1.0,
      "Frequency": 1.0,
    };

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          "Common Parameters",
          style: TextStyle(
            color: Color(0xFFF3B600),
            fontSize: 18,
            fontWeight: FontWeight.bold,
          ),
        ),
        SizedBox(height: 10),
        Column(
          children: commonParams.map((param) {
            return Padding(
              padding: const EdgeInsets.symmetric(vertical: 8.0),
              child: Row(
                children: [
                  Expanded(
                    flex: 2,
                    child: Text(
                      param,
                      style: TextStyle(
                        color: Colors.redAccent,
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                  Expanded(
                    flex: 2,
                    child: _buildInputBox(param, mfValues[param]!),
                  ),
                ],
              ),
            );
          }).toList(),
        ),
        SizedBox(height: 20),
      ],
    );
  }

// 🔥 New Input Box Function with Overlay Calculation
  Widget _buildInputBox(String param, double mf) {
    TextEditingController controller = TextEditingController();

    return Stack(
      children: [
        TextField(
          controller: controller,
          keyboardType: TextInputType.number,
          style: TextStyle(
            color: Colors.black,
            fontSize: 20,
            fontWeight: FontWeight.bold,
          ),
          textAlign: TextAlign.center,
          decoration: InputDecoration(
            fillColor: Colors.yellowAccent,
            filled: true,
            border: OutlineInputBorder(),
          ),
          onChanged: (value) {
            double input = double.tryParse(value) ?? 0.0;
            setState(() {
              calculatedResults[param] = (input * mf).toStringAsFixed(2);
            });
          },
        ),
        if (calculatedResults[param] != null && controller.text.isEmpty)
          Positioned(
            top: 8,
            left: 8,
            child: Text(
              calculatedResults[param]!,
              style: TextStyle(
                color: Colors.blueAccent,
                fontSize: 16,
                fontWeight: FontWeight.bold,
              ),
            ),
          ),
      ],
    );
  }

//66KV Lines Section (Independent Design)
  Widget _build66KVLinesSection() {
    List<String> fields = [
      "66KV Ranavav-1", "66KV Ranavav-2", "66KV Bagvadar",
      "66KV Degam-1", "66KV Degam-2"
    ];

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          "66KV Lines (Amp, Import & Export MWh)",
          style: TextStyle(
            color: Color(0xFFF3B600),
            fontSize: 18,
            fontWeight: FontWeight.bold,
          ),
        ),
        SizedBox(height: 10),
        Column(
          children: fields.map((field) {
            return Padding(
              padding: const EdgeInsets.symmetric(vertical: 8.0),
              child: Row(
                children: [
                  Expanded(
                    flex: 2,
                    child: Text(
                      field,
                      style: TextStyle(
                        color: Colors.redAccent,
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                  SizedBox(
                    width: 70,
                    height: 40,
                    child: TextField(
                      style: TextStyle(
                        color: Colors.black,  // Change text color here
                        fontSize: 22,  // Set your desired font size
                        fontWeight: FontWeight.bold,  // Set your desired font weight
                      ),
                      textAlign: TextAlign.center, // Align text to the center
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.symmetric(vertical: 6.0, horizontal: 8.0),  // Adjust vertical padding
                        fillColor: Colors.yellowAccent,
                        filled: true,
                        border: OutlineInputBorder(),
                      ),
                    ),
                  ),
                  SizedBox(width: 10),
                  SizedBox(
                    width: 100,
                    height: 40,
                    child: TextField(
                      style: TextStyle(
                        color: Colors.black,  // Change text color here
                        fontSize: 20,  // Set your desired font size
                        fontWeight: FontWeight.bold,  // Set your desired font weight
                      ),
                      textAlign: TextAlign.center, // Align text to the center
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 8.0),  // Adjust vertical padding
                        fillColor: Colors.yellowAccent,
                        filled: true,
                        border: OutlineInputBorder(),
                      ),
                    ),
                  ),
                  SizedBox(width: 10),
                  SizedBox(
                    width: 100,
                    height: 40,
                    child: TextField(
                      style: TextStyle(
                        color: Colors.black,  // Change text color here
                        fontSize: 20,  // Set your desired font size
                        fontWeight: FontWeight.bold,  // Set your desired font weight
                      ),
                      textAlign: TextAlign.center, // Align text to the center
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 8.0),  // Adjust vertical padding
                        fillColor: Colors.yellowAccent,
                        filled: true,
                        border: OutlineInputBorder(),
                      ),
                    ),
                  ),
                ],
              ),
            );
          }).toList(),
        ),
        SizedBox(height: 10),
      ],
    );
  }

//All Other Panels Section (Independent Design)
  Widget _buildAllOtherPanelsSection() {
    List<String> panels = [
      "66KV TR-1", "66KV TR-2", "11KV Incomer-1", "11KV Incomer-2",
      "11KV Kharva", "11KV Katvana", "11KV Pav", "11KV Bildi", "11KV Timbi"
    ];

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          "All Other Panels (Amp & MWh)",
          style: TextStyle(
            color: Color(0xFFF3B600),
            fontSize: 18,
            fontWeight: FontWeight.bold,
          ),
        ),
        SizedBox(height: 10),
        Column(
          children: panels.map((panel) {
            return Padding(
              padding: const EdgeInsets.symmetric(vertical: 8.0),
              child: Row(
                children: [
                  Expanded(
                    flex: 2,
                    child: Text(
                      panel,
                      style: TextStyle(
                        color: Colors.redAccent,
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                  SizedBox(
                    width: 80,
                    height: 40,
                    child: TextField(
                      style: TextStyle(
                        color: Colors.black,  // Change text color here
                        fontSize: 24,  // Set your desired font size
                        fontWeight: FontWeight.bold,  // Set your desired font weight
                      ),
                      textAlign: TextAlign.center, // Align text to the center
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.symmetric(vertical: 2.0, horizontal: 8.0),  // Adjust vertical padding
                        fillColor: Colors.yellowAccent,
                        filled: true,
                        border: OutlineInputBorder(),
                      ),
                    ),
                  ),
                  SizedBox(width: 10),
                  SizedBox(
                    width: 120,
                    height: 40,
                    child: TextField(
                      style: TextStyle(
                        color: Colors.black,  // Change text color here
                        fontSize: 22,  // Set your desired font size
                        fontWeight: FontWeight.bold,  // Set your desired font weight
                      ),
                      textAlign: TextAlign.center, // Align text to the center
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0),  // Adjust vertical padding
                        fillColor: Colors.yellowAccent,
                        filled: true,
                        border: OutlineInputBorder(),
                      ),
                    ),
                  ),
                ],
              ),
            );
          }).toList(),
        ),
        SizedBox(height: 10),
      ],
    );
  }

//LT Meter & 11KV Station Section (Independent Design)
  Widget _buildLTMeterAnd11KVStation() {
    List<String> panels = ["LT Meter", "11KV Station"];

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          "LT Meter & 11KV Station (MWh Only)",
          style: TextStyle(
            color: Color(0xFFF3B600),
            fontSize: 18,
            fontWeight: FontWeight.bold,
          ),
        ),
        SizedBox(height: 10),
        Column(
          children: panels.map((panel) {
            return Padding(
              padding: const EdgeInsets.symmetric(vertical: 8.0),
              child: Row(
                children: [
                  Expanded(
                    flex: 2,
                    child: Text(
                      panel,
                      style: TextStyle(
                        color: Colors.redAccent,
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                  SizedBox(
                    width: 210, // Custom width for MWh input in this section
                    height: 55,
                    child: TextField(
                      style: TextStyle(
                        color: Colors.black,  // Change text color here
                        fontSize: 28,  // Set your desired font size
                        fontWeight: FontWeight.bold,  // Set your desired font weight
                      ),
                      textAlign: TextAlign.center, // Align text to the center
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0),  // Adjust vertical padding
                        fillColor: Colors.yellowAccent,
                        filled: true,
                        border: OutlineInputBorder(),
                      ),
                    ),
                  ),
                ],
              ),
            );
          }).toList(),
        ),
        SizedBox(height: 10),
      ],
    );
  }
}
Editor is loading...
Leave a Comment