Флаттер - Как передавать данные между страницами в PageView Widget? - PullRequest
2 голосов
/ 07 января 2020

У меня есть виджет PageView, как показано ниже:

Widget buildPageView() {
    return PageView(
      controller: pageController,

      onPageChanged: (index) {
        pageChanged(index);
      },

      children: <Widget>[
        AddPropertyDescription(pageController: pageController,),
        AddPropertyMedia(pageController: pageController),
        AddPropertyLocation(pageController: pageController),
        AddPropertyDetails(pageController: pageController),
        AddPropertyAmenities(pageController: pageController)
      ],
    );
  }

У меня есть пять страниц в качестве виджета в моем PageView, теперь я хочу передавать данные с одной страницы на другую до последней страницы, когда страница изменилась. ....

Я взял кнопку Next на каждой странице. В кнопке Далее на вкладке () я просто увеличиваю номер страницы, чтобы перейти к следующей странице, как показано ниже

 onTap: () async{
                  pageController.animateToPage(
                    1,
                    duration: Duration(milliseconds: 300),
                    curve: Curves.linear,
                  );
              }, 

При нажатии следующей кнопки и go для перехода к следующему экрану я хочу перенести данные и передать их на следующую страницу.

Есть ли здесь кто-нибудь, кто мог бы столкнуться с той же проблемой при флаттере ... .

Пожалуйста, объясните мне, как мне этого добиться .......

1 Ответ

3 голосов
/ 07 января 2020

Виджет Страница может получать данные и обратный вызов для передачи данных, я объясню, что я имею в виду.

buildPageView должен передать виджетам дополнительные параметры:


int data = 0;

void onDataChange(int newData) {
  setState(() => data = newData);
}

Widget buildPageView() {
    return PageView(
      controller: pageController,

      onPageChanged: (index) {
        pageChanged(index);
      },

      children: <Widget>[
        AddPropertyDescription(pageController: pageController, data: data, onDataChange: onDataChange),
        AddPropertyMedia(pageController: pageController, data: data, onDataChange: onDataChange),
        AddPropertyLocation(pageController: pageController, data: data, onDataChange: onDataChange),
        AddPropertyDetails(pageController: pageController, data: data, onDataChange: onDataChange),
        AddPropertyAmenities(pageController: pageController, data: data, onDataChange: onDataChange)
      ],
    );
  }

А сам виджет должен кроме параметров:

class MyWidget extends StatelessWidget {
  const MyWidget({
    @required this.data,
    @required this.onDataChange,
    Key key,
  }) : super(key: key);

  final int data;
  final Function(int) onDataChange;

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      onPressed: () => onDataChange(data + 1),
      child: Text(data.toString()),
    );
  }
}

...