PageViewを使ってユーザー登録ページを作成していて、
- SignupPage1
- SignupPage2
- SignupPage3
に登録に必要な情報を入力してもらおうと考えています。
各ページのクラスにボタンを設置し、
押すと次のスライドに移動するようにしたいのですが上手くいきません。
_controller.nextPageを使ってスライドさせようとしているのですが、
このコードが上手く走らない理由をご存知の方は教えて頂きたいです。
onPressed: () => { _controller.nextPage( duration: const Duration(seconds: 1), curve: Curves.fastOutSlowIn) },
<エラー文言>
PageController page cannot be accessed before a PageView is built with it
<コード全文>
PageViewのコード
Dart
1import 'package:flutter/material.dart'; 2import 'package:funandpractise/ui/auth/signup/signup_page1.dart'; 3import 'package:funandpractise/ui/auth/signup/signup_page2.dart'; 4import 'package:funandpractise/ui/auth/signup/signup_page3.dart'; 5import 'package:smooth_page_indicator/smooth_page_indicator.dart'; 6 7class SignupPage extends StatelessWidget { 8 final _controller = PageController(); 9 10 11 Widget build(BuildContext context) { 12 return Scaffold( 13 body: SafeArea( 14 child: Column( 15 mainAxisAlignment: MainAxisAlignment.spaceEvenly, 16 children: [ 17 // page view 18 SizedBox( 19 width: double.infinity, 20 height: MediaQuery.of(context).size.height * 0.8, 21 child: PageView( 22 controller: _controller, 23 24 children: const [ 25 SignupPage1(), 26 SignupPage2(), 27 SignupPage3(), 28 ], 29 ), 30 ), 31 32 // dot indicators 33 SmoothPageIndicator( 34 controller: _controller, 35 count: 3, 36 effect: SlideEffect( 37 activeDotColor: Theme.of(context).primaryColor, 38 dotColor: Colors.grey.shade400, 39 dotHeight: 10, 40 dotWidth: 10), 41 ), 42 ], 43 ), 44 ), 45 ); 46 } 47}
SignupPage1,SignupPage2ページのコード(共通)※色々省略しています
Dart
1import 'package:flutter/material.dart'; 2import 'package:provider/provider.dart'; 3import '../../../model/auth/registor_model.dart'; 4import '../../../widget/custom_button.dart'; 5import '../login_page.dart'; 6 7class SignupPage1 extends StatefulWidget { 8 const SignupPage1({Key? key}) : super(key: key); 9 10 11 State<SignupPage1> createState() => _SignupPage1State(); 12} 13 14class _SignupPage1State extends State<SignupPage1> { 15 16 17 Widget build(BuildContext context) { 18 final _controller = PageController(); 19 20 return ChangeNotifierProvider<RegistorModel>( 21 create: (_) => RegistorModel(), 22 child: Consumer<RegistorModel>(builder: (context, model, child) { 23 return Scaffold( 24 body: SafeArea( 25 child: Column( 26 mainAxisAlignment: MainAxisAlignment.center, 27 children: <Widget>[ 28 29//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーここのボタンでスライドを次のページへ遷移させたい 30 CustomButton( 31 label: "次へ", 32 onPressed: () => { 33 _controller.nextPage( 34 duration: const Duration(seconds: 1), 35 curve: Curves.fastOutSlowIn) 36 }, 37 borderRadius: 30, 38 ), 39//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーCustomButtonは別クラスで作ったボタンWidget 40 ], 41 ), 42 )); 43 }), 44 ); 45 } 46}

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/06/27 14:17