Вы можете изменить физику PageView:
GlobalKey<FormState> _formKey = GlobalKey<FormState>();
StreamController isValidController = StreamController();
bool isValid = false;
List pages;
@override
void initState() {
super.initState();
isValidController.stream.listen((value){
setState(() {
isValid = value;
});
});
pages = [
FormPage(isValidController: isValidController, formKey: _formKey,),
SecondPage(),
ThirdPage(),
FourthPage(),
FifthPage(),
];
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView.builder(
physics: isValid ? ClampingScrollPhysics() : NeverScrollableScrollPhysics(), //changing here
itemBuilder: (_, index) {
return pages[index];
},
),
);
}
@override
void dispose() {
isValidController.close();
super.dispose();
}
И на странице с формой:
class FormPage extends StatelessWidget {
final GlobalKey<FormState> formKey;
final StreamController isValidController;
const FormPage({Key key, this.formKey, this.isValidController});
@override
Widget build(BuildContext context) {
return Form(
key: formKey,
child: Align(
child: RaisedButton(
onPressed: () {
if (formKey.currentState.validate()) {
isValidController.add(true);
}
},
),
),
);
}
}