#android #flutter #counter #pass-data
Вопрос:
Здравствуйте, ребята, я хочу передать данные счетчика на новый экран в flutter. Я уже пытался поместить данные в конструктор, но это не сработает. Это и есть код:
int _counterb = 0;
setState(() {
Navigator.of(context).push(
MaterialPageRoute(builder:
(BuildContext context) =>
Draw(_counterb: _counterb),
),
);
});
Итак, как я могу передать эти данные _counterb на вторую страницу?
Редактировать
Я решил эту проблему. Но теперь я сталкиваюсь с другим. Я хочу передать 12 значений. Но для этого нужны только двое. Как я могу передать более 2 позиционных аргументов?
Комментарии:
1. Вы можете передать любое количество аргументов в конструкторе. Просто объявите их в своем классе рисования
Ответ №1:
Я рекомендую использовать provider или getx для управления состоянием в приложении вместо передачи 12 аргументов на разные экраны;
если вы все еще хотите это сделать, вы можете отправить данные на второй экран через settings
например:
Navigator.of(context).push(
MaterialPageRoute(builder:
(BuildContext context) =>
Draw(),
settings: RouteSettings(arguments: {'counterb': _counterb,},),
),
);
и доступ к нему на экране Draw() через:
@override
void didChangeDependencies() {
final routeArg =
ModalRoute.of(context)!.settings.arguments as Map<dynamic, dynamic>;
final counterb = routeArg['counterb'];
}
также функция setState() здесь не нужна
Ответ №2:
Вы пытались получить доступ к своей _counterb
переменной на Draw
странице?
Я предполагаю, что ничья-это StatefulWidget
class Draw extends StatefulWidget {
final int counter1, counter2, counter3; //Declare any number of variables you want
const Draw({this.counter1, this.counter2, this.counter3});
@override
DrawState createState() => DrawState();
}
class DrawState extends State<Draw> {
@override
Widget build(BuildContext context) {
return Text("${widget.counter1} ${widget.counter2} ${widget.counter3}");
}
}
Ваша Navigator
воля будет выглядеть так
Navigator.of(context).push(
MaterialPageRoute(builder:
(BuildContext context) =>
Draw(counter1: _counter1, counter2: _counter2, counter3: _counter3),
),
);
Комментарии:
1. Да, я попробовал, и это сработало отлично.
2. Единственная проблема в том, что я хочу передать более одного значения…
3. Когда я добавляю третье значение, оно говорит: «Слишком много позиционных аргументов: 2 ожидаемых, но 3 найдено».
4. Хорошо понял, что это означает, что в классе Draw вы объявили только две переменные. Поэтому вам нужно объявить свою третью переменную в классе Draw, чтобы передать ее в конструктор