Invalid value: Not in inclusive range 0..2: 3

 avatar
unknown
dart
3 years ago
5.4 kB
187
Indexable
import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:miit/screens/profile/widgets/custom_answer.dart';
import 'package:path_provider/path_provider.dart';

class CustomQuestionField extends StatefulWidget {
  @override
  State<CustomQuestionField> createState() => _CustomQuestionFieldState();
}

class _CustomQuestionFieldState extends State<CustomQuestionField> {
  @override
  void initState() {
    super.initState();
    read();
  }

  List<Data> data = [];
  final Map<String, String> answers = {};
  final Map<String, String> qst = {
    "Everyone should read...": "",
    "Two truths and a lie...": "",
    "I can quote every line from...": "",
    "If I didn't have to work I would...": "",
    "People think I am...": "",
    "Never have I ever...": "",
    "Believe it or not, I...": "",
    "I am amazing at...": "",
    "My life as a movie...": "",
    "My ultimate dinner party guest list...": "",
    "The dorkiest thing about me is...": "",
    "On the weekend you'll find me...": "",
  };

  Future<void> _write(Map<String, dynamic> map) async {
    final directory = await getApplicationDocumentsDirectory();

    final jsonStr = jsonEncode(map);

    final file = File('${directory.path}/answers.txt');

    await file.writeAsString(jsonStr);
  }

  Future<Map<String, dynamic>> read() async {
    final directory = await getApplicationDocumentsDirectory();

    final file = File('${directory.path}/answers.txt');
    final jsonStr = await file.readAsString();
    final raw = jsonDecode(jsonStr) as Map<String, dynamic>;
    raw.forEach((key, value) {
      data.add(Data(question: key, answer: value));
    });
    print(raw);
    return raw;
  }

  @override
  Widget build(
    BuildContext context,
  ) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        // for (var q in qst.keys) question(q),
        SizedBox(
          height: 500,
          child: ListView.builder(
              itemCount: qst.keys.length,
              itemBuilder: (context, index) {
                return question(qst.keys.elementAt(index), index);
              }),
        ),
        SizedBox(
          height: 50,
        ),
      ],
    );
  }

  Widget question(String question, int index) {
    var hint = "write something";
    final myController = TextEditingController();
    return Padding(
      padding: const EdgeInsets.only(top: 15),
      child: Stack(
        children: [
          Card(
            elevation: 0,
            shape: RoundedRectangleBorder(
                side: BorderSide(width: 0.5, color: Colors.black),
                borderRadius: BorderRadius.circular(
                  32,
                )),
            child: Padding(
              padding: const EdgeInsets.all(20.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Padding(
                    padding: const EdgeInsets.only(bottom: 15, left: 10),
                    child: Text(
                      question,
                      style: TextStyle(
                          color: Colors.black,
                          fontSize: 18.0,
                          fontWeight: FontWeight.bold),
                    ),
                  ),
                  TextField(
                    onChanged: (String ansr) {
                      answers[question] = ansr;
                    },
                    onSubmitted: (String ansr) {
                      _write(answers);
                    },
                    controller: myController,
                    decoration: InputDecoration(
                      enabledBorder: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(20),
                        borderSide: BorderSide(
                          color: Color.fromARGB(255, 128, 124, 124),
                        ),
                      ),
                      focusedBorder: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(20),
                        borderSide: BorderSide(
                          color: Color.fromARGB(255, 128, 124, 124),
                        ),
                      ),
                      border: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(20),
                        borderSide: BorderSide(
                          color: Color.fromARGB(255, 128, 124, 124),
                        ),
                      ),
                      hintText: data[index].answer.isEmpty
                          ? "Write something"
                          : data[index].answer
                    ),
                  ),
                ],
              ),
            ),
          ),
          Positioned(
            top: -10,
            right: -25,
            child: RawMaterialButton(
              onPressed: () {
                myController.clear();
              },
              elevation: 2.0,
              fillColor: Colors.white,
              child: Text(
                "X",
                style:
                    TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
              ),
              shape: CircleBorder(),
            ),
          ),
        ],
      ),
    );
  }
}
Editor is loading...