Flutter - 如何在 PageView Widget 中的页面之间传递数据?

him*_*eam 2 dart flutter flutter-pageview

我有一个如下所示的 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)
      ],
    );
  }
Run Code Online (Sandbox Code Playgroud)

我的 PageView 中有五个页面作为小部件,现在我想在页面更改时将数据从一个页面传递到另一个页面,直到最后一页......

Next在每个页面中都选择了按钮,在下一个按钮 onTap() 中,我只需增加页码即可滑动到下一页,如下所示

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

当按下下一步按钮并进入下一个屏幕时,我想携带数据并将其传递到下一页。

这里有没有人在颤振中遇到过同样的问题.....

请指导我如何实现这一目标......

Zvi*_*arp 5

Page 小部件可以获取数据,以及用于传递数据的回调,我将解释我的意思。

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)
      ],
    );
  }
Run Code Online (Sandbox Code Playgroud)

并且小部件本身应该除了参数:

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()),
    );
  }
}

Run Code Online (Sandbox Code Playgroud)

  • 您能解释一下 MyWidget 是什么吗?是 PageVIew 中的 Widget 还是 Pageview 中的 Widget?我有点困惑,因为它没有页面控制器。你有完整的例子吗? (2认同)