#flutter #dart #navigation #screen
#flutter #dart #навигация #экран
Вопрос:
Я изо всех сил пытаюсь вернуть разные данные на свой рабочий стол. У меня есть экран Mypage (), на котором отображаются карточки в listview с заголовком и текстом. Я новичок в flutter, и я действительно не знаю, как вернуть данные с моего другого экрана с именем WritingPage(), где есть два текстовых поля. Вот мой фактический код для кнопки на Mypage():
FlatButton(
onPressed: (){
Navigator.of(context).push(MaterialPageRoute(
builder: (context){
return WritingPage();
})).then((value) {
dreams.add(value);
print(dreams);
setState(() {});
})
;
},
child: Icon(Icons.add, size: 30,),
color: Colors.black,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)),
),
Затем, вот код WritingPage():
class WritingPage extends StatefulWidget {
@override
_WritingPageState createState() => _WritingPageState();
}
class _WritingPageState extends State<WritingPage> {
String text;
void submit(){
Navigator.of(context).pop(_textEditingController.text);
}
TextEditingController _textEditingController = TextEditingController();
TextEditingController _titleEditingController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
backgroundColor: kEdgeColor,
title: Text('Writing part'),
),
body: Container(
child: Column(
children: [
TextField(
controller: _textEditingController,
obscureText: false,
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.all(const Radius.circular(12))
)
),
),
TextField(
controller: _titleEditingController,
obscureText: false,
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.all(const Radius.circular(12))
)
),
),
RaisedButton(onPressed : ()=> submit()),
],
),
),
);
}
}
Я бы хотел, чтобы каждый раз, когда я нажимаю кнопку на странице записи, в listview создается карточка с данными двух текстовых полей.
Если вам нужна дополнительная информация, пожалуйста, спросите меня, заранее спасибо!
Ответ №1:
В MyPage
FlatButton(
onPressed: () async {
final result = await Navigator.of(context).push(MaterialPageRoute(builder: (context){return WritingPage();}));
if (null != result) {
dreams.add(result);
print(dreams);
setState(() {});
}
},
child: Icon(Icons.add, size: 30,),
color: Colors.black,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)),
),
В WritingPage
void submit() {
Navigator.of(context).pop({
"text": _textEditingController.text.trim(),
"title": _titleEditingController.text.trim();
});
}
Комментарии:
1. Я получил сообщение об ошибке, но я думаю, это потому, что dreams — это список, а не карта. Ну, я не знаю, что использовать, чтобы сохранить заголовок и содержимое, а затем использовать их в карточке в listview. Вот ошибка: тип ‘_InternalLinkedHashMap<Строка, строка>’ не является подтипом типа ‘String’
2. Каков тип содержимого переменной
dreams
?3. статический список снов = [];
4. Что вы используете
dreams
в своем виджете Card?5. Ну, это мой конструктор card, но я действительно не знаю, как его использовать: класс DreamCard расширяет StatelessWidget { DreamCard({this . Содержимое, this.title}); заголовок конечной строки; содержимое конечной строки;
Ответ №2:
Одним из решений этого является определение класса в другом файле, а затем вы можете ссылаться на этот класс с нескольких страниц, просто не забудьте использовать setState . Кроме того, если вы открываете контекст, обязательно перестройте исходную страницу при возврате.