Edit achievement with late

PHOTO EMBED

Sun Feb 26 2023 14:46:49 GMT+0000 (Coordinated Universal Time)

Saved by @2hibay

import 'package:calendarx/model/achievement_model.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:intl/intl.dart' show DateFormat;
import 'package:cloud_firestore/cloud_firestore.dart';

// class EditAchievement extends StatefulWidget {
//   const EditAchievement({super.key});
//   @override
//   State<EditAchievement> createState() => _EditAchievementState();
// }

class EditAchievement extends StatefulWidget {
  // final DateTime firstDate;
  // final DateTime lastDate;
  final Achievement? achievement;
  const EditAchievement(
      {Key? key,
      // required this.firstDate,
      // required this.lastDate,
      this.achievement})
      : super(key: key);

  @override
  State<EditAchievement> createState() => _EditAchievementState();
}

class _EditAchievementState extends State<EditAchievement> {
  late TextEditingController _ctreventname;
  late TextEditingController _ctrresult;
  late TextEditingController _ctrlocation;
  late TextEditingController _ctrdescription;

  @override
  void initState() {
    super.initState();
    //   _selectedDate = widget.event.date;
    _ctreventname = TextEditingController(text: widget.achievement?.eventname);
    _ctrresult = TextEditingController(text: widget.achievement?.result);
    _ctrlocation = TextEditingController(text: widget.achievement?.location);
    _ctrdescription =
        TextEditingController(text: widget.achievement?.description);
  }

  // final _ctrresult = TextEditingController();
  // final _ctrdate = TextEditingController();
  // final _ctrlocation = TextEditingController();
  // final _ctrdescription = TextEditingController();

  // var _selectedDate;
  // DateTime _dateTime = DateTime.now();
  // late final _selectedDate;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Edit Achievement"),
        shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.vertical(
            bottom: Radius.circular(20),
          ),
        ),
      ),
      body: ListView(
        padding: const EdgeInsets.all(16.0),
        children: [
          TextField(
              controller: _ctreventname,
              maxLines: 1,
              decoration: InputDecoration(
                labelText: "Event's name",
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(20),
                ),
              )),
          const SizedBox(
            height: 15,
          ),
          TextField(
              controller: _ctrresult,
              maxLines: 1,
              decoration: InputDecoration(
                labelText: 'Result',
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(20),
                ),
              )),
          const SizedBox(
            height: 15,
          ),
          // Padding(
          //   padding: const EdgeInsets.all(8.0),
          //   child: InputDatePickerFormField(
          //     firstDate: widget.firstDate,
          //     lastDate: widget.lastDate,
          //     initialDate: _selectedDate,
          //     onDateSubmitted: (date) {
          //       print(date);
          //       setState(() {
          //  //       _selectedDate = date;
          //       });
          //     },
          //   ),
          // ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              children: [
                //Text(_dateTime.toIso8601String()),
                /////////
                FormBuilderDateTimePicker(
                  name: "date",
                  initialValue: DateTime.now(),
                  // widget.selectedDate ?? widget.event?.date ?? DateTime.now(),
                  initialDate: DateTime.now(),
                  fieldHintText: "Edit Date",
                  initialDatePickerMode: DatePickerMode.day,
                  inputType: InputType.date,
                  format: DateFormat('EEEE, dd MMMM, yyyy'),
                  decoration: InputDecoration(
                    contentPadding: const EdgeInsets.symmetric(vertical: 10),
                    border: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(20)),
                    prefixIcon: const Icon(Icons.calendar_today_rounded),
                  ),
                  // onChanged: ((val) => (_selectedDate) {
                  //       print(_selectedDate);
                  //       setState(() {
                  //         _selectedDate = val;
                  //       });
                  //     }),
                  //     onChanged: (val) { _addAchievement(val); }

                  // (val) {
                  //   _addAchievement();
                  // }

                  // (val) {
                  // print(val);
                  // _addAchievement(val);
                  // },
                ),
              ],
            ),
          ),

          const SizedBox(
            height: 15,
          ),
          TextField(
              controller: _ctrlocation,
              maxLines: 1,
              decoration: InputDecoration(
                labelText: 'Location',
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(20),
                ),
              )),
          const SizedBox(
            height: 15,
          ),
          TextField(
              controller: _ctrdescription,
              maxLines: 5,
              decoration: InputDecoration(
                labelText: 'Description details - if needed',
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(20),
                ),
              )),
          const SizedBox(
            height: 10,
          ),
          ElevatedButton(
            style: ButtonStyle(
                shape: MaterialStateProperty.all<RoundedRectangleBorder>(
                    RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(18.0),
                        side: const BorderSide(color: Colors.blue)))),
            onPressed: () {
              _addAchievement();
              // print _dateTime;
            },
            child: const Text("Save"),
          ),
        ],
      ),
    );
  }

  void _addAchievement() async {
    final eventname = _ctreventname.text;
    final result = _ctrresult.text;
    // final _ctrdate = TextEditingController();
    final location = _ctrlocation.text;
    final description = _ctrdescription.text;
    // final date = _selectedDate;
    final userID = FirebaseAuth.instance.currentUser?.uid;
    if (userID == null) {
      throw Exception('User is not logged in');
    }
    if (eventname.isEmpty) {
      print("Event's name cannot be empty");
      return;
    }
    await FirebaseFirestore.instance
        .collection(
            'users') // obsługa wielu użytkowników po zalogowaniu każdy ma inne dane
        .doc(userID)
        .collection('achievements')
        .doc()
        .update({
      "eventname": eventname,
      "result": result,
      "location": location,
      "description": description,
      //  "date": Timestamp.fromDate(selectedDate),
    });
    if (mounted) {
      Navigator.pop<bool>(context, true);
    }
  }
}
content_copyCOPY