Как я могу сохранить входное значение TextField и представить его на другом экране в флаттере? - PullRequest
0 голосов
/ 27 марта 2020

Я совершенно новичок в трепетании, и у меня возникли некоторые проблемы. У меня есть текстовое поле, которое я ввожу в какую-то строку, затем я сохраняю ввод через TextEditingController, затем я хочу отобразить ввод на другом экране, но что происходит в мой случай, что каждый раз, когда я меняю экраны, значение TextEdditingcontroller.text сбрасывается,

полный код по адресу: https://github.com/0x-xsh/studentchat/tree/master/lib

проблема при https://github.com/0x-xsh/studentchat/blob/master/lib/NewProblem.dart в строке 142 она печатает введенное значение в консоли, но отправляет пустую строку на новый экран. поэтому он возвращает ошибку, когда https://github.com/0x-xsh/studentchat/blob/master/lib/ProblemList.dart LINE 19 выполняется. я попытался сделать setState на линии 142. но та же проблема.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Я бы добавил параметр List<Problem> в наш класс ProblemList.

Затем мы можем перейти в этот список при переходе на нашу страницу ProblemList и получить к нему следующий доступ:

class ProblemList extends StatefulWidget {

  final List<Problem> pList;

  const ProblemList({this.pList});

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

class ProblemListState extends State<ProblemList> {


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("My Problems"),
          leading: Icon(Icons.list),
        ),
        body: Text(widget.pList[0].desc), //<-------- This is where you access the list
      ),
    );
  }
}

Строка 142 становится:

onPressed: () {
               Problem problem = new Problem(problemDescription.text, problemDetails.text);
               problems.add(problem);
               print(problems[0].desc);
               Navigator.push(context,
               MaterialPageRoute(builder: (context) => 
               ProblemList(pList: problems))); //<----- Passing the list to the class
                  },
0 голосов
/ 27 марта 2020

Вы не можете получить доступ к состоянию другой страницы, как в ProblemList.dart ...

Вам нужно будет передать список в качестве аргумента в ProblemList. Попробуйте объявить List<Problem> problems; внутри класса ProblemList, добавить эту переменную в конструктор класса и отправить список на NewProblem.dart, строка 147.

Кроме того, ваш код беспорядок ... Файлы имеют имя и классы имеют другое имя .. Очень запутанно ... Всегда старайтесь использовать правильное соглашение об именах для ваших файлов и классов. Это поможет вам и всем, кто пытается вам помочь:)

https://dart.dev/guides/language/effective-dart/style

Если вы лучше понимаете Flutter, я рекомендую вам узнать о состоянии Управление с Флаттером .. Есть много способов. Посмотрите на некоторые варианты и выберите тот, который лучше соответствует потребностям вашего проекта ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...