type 'List<Widget>' is not a subtype of type 'Widget

Viewed 60

' I am a beginner in flutter dev and was trying to implement the screen but then cannot seem to get my head around the error thrown This code below is supposed to display an onboarding screen but it seems to throw an error with the emulator regarding the title and cannot seem to find any solution on the web any help?'

class OnBoardingScreen extends StatefulWidget {

  @override
  _OnBoardingScreenState createState() => _OnBoardingScreenState();
}

class _OnBoardingScreenState extends State<OnBoardingScreen> {
 final int _numPages = 5;
 final PageController _pageController = PageController(initialPage: 0);
int _currentPage =0;
void _onIntroEnd(context) {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => SignUpScreen()));
}

void _onIntroSkip(context) {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => LoginScreen()));
}


 _buildPageIndicator(){
  List<Widget> list =[];
  for (int i=0;i<_numPages;i++){
  list.add(i == _currentPage ? _indicator(true) : _indicator(false) );
 }
 return list;
 }

 _indicator (bool isActive){
 return AnimatedContainer(duration: Duration(milliseconds: 150),
  margin: EdgeInsets.symmetric(horizontal: 8.0),
  height: 8.0,
  width: isActive ? 24.0 : 16.0,
  decoration: BoxDecoration(color: isActive ? Colors.white:Color(0xF385AD5),
    borderRadius:BorderRadius.all(Radius.circular(12))
   ),
  );


 }


@override
Widget build(BuildContext context) {
 return Scaffold(
   body: AnnotatedRegion(
     value: null,
     child: Container(
      decoration: BoxDecoration(
        gradient:LinearGradient(
          begin: Alignment.topCenter,
          end: Alignment.bottomCenter,
          stops: [0.1,0.4,0.7,0.9],
            colors: [
              Color(0xF3C5DD7),
              Color(0xF092458),
              Color(0xF1B5695),
              Color(0xF4664A0)

            ]
        )
      ),
      child: Padding(
        padding: const EdgeInsets.symmetric(vertical: 40),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Container(
                alignment: Alignment.centerRight,
                child: TextButton(
                  onPressed: (){
                    _onIntroSkip(context);
                  },
                  child: Text(
                    'Skip',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 20.0,
                    ),
                  ),
                ),
              ),
              Container(
                height: 600.0,
                child: PageView(
                  physics :ClampingScrollPhysics(),
                  controller: _pageController,
                  onPageChanged: (int page){
                    setState(() {
                      _currentPage =page;
                    });

                  },
                  children: [
                    Padding(
                      padding: EdgeInsets.all(40.0),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Center(
                            child: Image(
                              image: AssetImage('assets/rooms.webp'
                              ),
                              height: 300,
                              width: 300,
                            ),
                          ),
                          SizedBox(
                            height: 30.0,
                          ),
                          Text('Lorem Ipsum',
                          style: TextStyle(
                            fontWeight: FontWeight.w800
                          ),
                          ),

                          SizedBox(height: 15.0,),
                          Text('Lorem IpSsum',style:TextStyle(
                            fontWeight: FontWeight.w300
                          ),
                            )
                        ],
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.all(40.0),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Center(
                            child: Image(
                              image: AssetImage('assets/thoughts.webp'
                              ),
                              height: 300,
                              width: 300,
                            ),
                          ),
                          SizedBox(
                            height: 30.0,
                          ),
                          Text('Lorem Ipsum',
                            style: TextStyle(
                                fontWeight: FontWeight.w800
                            ),
                          ),

                          SizedBox(height: 15.0,),
                          Text('Lorem IpSsum',style:TextStyle(
                              fontWeight: FontWeight.w300
                          ),
                          )
                        ],
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.all(40.0),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Center(
                            child: Image(
                              image: AssetImage('group.jpg'
                              ),
                              height: 300,
                              width: 300,
                            ),
                          ),
                          SizedBox(
                            height: 30.0,
                          ),
                          Text('Lorem Ipsum',
                            style: TextStyle(
                                fontWeight: FontWeight.w800
                            ),
                          ),

                          SizedBox(height: 15.0,),
                          Text('Lorem IpSsum',style:TextStyle(
                              fontWeight: FontWeight.w300
                          ),
                          )
                        ],
                      ),
                    ),

                  ],
                ),
              ),
              Row(
                mainAxisAlignment:MainAxisAlignment.center ,children: [
                  _buildPageIndicator() ,
              ],
              ),
              _currentPage != _numPages - 1 ?
              Expanded(
                  child: Align(
                  alignment: FractionalOffset.bottomRight,
                   child: TextButton(
                  onPressed: () {
                    _pageController.nextPage(duration: Duration(milliseconds: 500), curve: Curves.ease);
                  }, child:Row(
                     mainAxisAlignment: MainAxisAlignment.center,
                     mainAxisSize: MainAxisSize.min,
                     children: [
                       Text('Next',style: TextStyle(color: Colors.white,
                           fontSize: 22.0),),
                       SizedBox(
                         width: 10.0,
                       ),
                       Icon(
                         Icons.arrow_forward,
                         color: Colors.white,
                         size: 30,
                       )
                     ],
                   ),
                   ),
                   ),
                )

                  :
                  Text("")
            ],

        ),
      ),
    ),
  ),
  bottomSheet:_currentPage == _numPages -1 ? Container(
    height: 100.0,
    width: double.infinity,
    color: Colors.white,
    child: GestureDetector(
      onTap: (){
        _onIntroEnd(context);
      },
      child: Center(
        child: Padding(padding: EdgeInsets.only(bottom: 30.0),child:
        Text(
          'Get Started',
          style: TextStyle(
            color: Color(0xF3C5DD7),
            fontSize: 20.0,
            fontWeight: FontWeight.bold,

          ),
        )),
      ),
    ),
  ) :
      Text(''),
);
 }
}

'This is supposed to display an Onboarding Screen but throws an error . This is shown with the image attached '

image

2 Answers

Change these parts of your code to look like this:

 List<Widget> _buildPageIndicator(){
  List<Widget> list =[];
  for (int i=0;i<_numPages;i++){
  list.add(i == _currentPage ? _indicator(true) : _indicator(false) );
  }
 return list;
 }
.
.
.
.
Row(
 mainAxisAlignment:MainAxisAlignment.center,
 children: _buildPageIndicator() ,
),

Replace this part of your code:

...
Row(
    mainAxisAlignment:MainAxisAlignment.center ,children: [
        _buildPageIndicator() ,
    ],
),
...

with

...
Row(
    mainAxisAlignment:MainAxisAlignment.center, children: _buildPageIndicator(),
),
...

or with

...
Row(
    mainAxisAlignment:MainAxisAlignment.center ,children: [
        ..._buildPageIndicator(),
    ],
),
...
Related