Как получить переменную класса из другого класса в Flutter - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть виджет с состоянием, который включает в себя кнопки. Я сохраняю количество нажатий пользователя в переменной int, называемой «counter».

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

Каков наилучший способ передачи переменной счетчика из первого виджета во второй виджет?

Добавлен код

Оба моих класса являются виджетами с состоянием. Итак, я объявил stati c int counter таким образом:

class AppListView extends StatefulWidget {
  static int counter;

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

Теперь я могу достичь счетчика из другого класса, но не могу достичь из своего собственного класса. Я имею в виду, мне нужно увеличить счетчик в этой части, но он говорит неопределенным.

class _AppListViewState extends State<AppListView> {
@override
  Widget build(BuildContext context) {
    return FlatButton(
           onPressed: (){
              counter++ (can't reach counter here)
      }

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Подход 1:

Создайте ValueChanged из родительского виджета, добавьте передачу в FirstWidget, когда смените couter -> call ValueChanged для отправки Обновление до родительского виджета. Родитель обновит состояние для второго виджета.

Подход 2:

Создание потока из родительского виджета, добавление прохода в FirstWidget и Sencond Widget (с использованием StreamBuilder для отображения виджета). когда сменить couter -> изменить значение Stream для обновления на Second Widget.

Демо обновления:

Link DartPad

0 голосов
/ 09 апреля 2020

Просто, в своем коде просто напишите "widget.counter" в child. В виджете statefull для доступа к родительской переменной вы должны использовать «widget.instace». В этом случае «widget.counter» позволит вам получить доступ к переменной счетчика родительского элемента.

  class AppListView extends StatefulWidget {
    int counter;

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

  class _AppListViewState extends State<AppListView> {
  @override
    Widget build(BuildContext context) {
      return FlatButton(
            onPressed: (){
                widget.counter++
        }

Примечание. .counter в детском классе

0 голосов
/ 09 апреля 2020

Возможно, вы захотите сделать желаемую переменную static.

class Something {
   static int counter; 
}

Затем вы можете использовать переменную в другом виджете следующим образом:

class StatefulWidget{
   FlatButton(
    onPressed: (){
      Something.counter++; // This variable is your counter you mentioned earlier
   }
);
}

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