我正在 Flutter 中创建一个注册表单,我希望用户完成步骤。每一步都应该以滑动效果过渡到下一步。例如,如果我在第 1 步,移动到第 2 步应该将表单向左滑动,我应该得到表单 2。然后如果我回到表单 1,它应该向右滑动表单。
我试图用多条路线做到这一点:
routes: {
'/': (context) => HomePage(),
'/step1': (context) => FormStep1(),
'/step2': (context) => FormStep2(),
},
Run Code Online (Sandbox Code Playgroud)
然后提交:
Navigator.push(
context,
EnterExitRoute(exitPage: FormStep1(), enterPage: FormStep2())
);
Run Code Online (Sandbox Code Playgroud)
但这也会使 App Bar 滑动,我只希望表单滑动。
HTM*_*ell 11
在朋友的建议下,我最终使用了PageView. 这样我就不必为每一步都制作一条新路线。
class _RegisterFormState extends State<RegisterForm> {
final _formsPageViewController = PageController();
List _forms;
@override
Widget build(BuildContext context) {
_forms = [
WillPopScope(
onWillPop: () => Future.sync(this.onWillPop),
child: Step1Container(),
),
WillPopScope(
onWillPop: () => Future.sync(this.onWillPop),
child: Step2Container(),
),
];
return Expanded(
child: PageView.builder(
controller: _formsPageViewController,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
return _forms[index];
},
),
);
}
void _nextFormStep() {
_formsPageViewController.nextPage(
duration: Duration(milliseconds: 300),
curve: Curves.ease,
);
}
bool onWillPop() {
if (_formsPageViewController.page.round() ==
_formsPageViewController.initialPage) return true;
_formsPageViewController.previousPage(
duration: Duration(milliseconds: 300),
curve: Curves.ease,
);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
解释:
WillPopScope“后退”按钮包装每个表单会影响导航。physics: NeverScrollableScrollPhysics()在PageView构建器上使用选项,因此它不会受到滑动手势的影响。_nextFormStep()
移动到下一个表单的方法。WillPopScope()列表中每个的子项只是您想要滑动的表单/小部件。| 归档时间: |
|
| 查看次数: |
6242 次 |
| 最近记录: |