커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
2페이지 만드는 중에 TabBarView의 오류가 생겼습니다.
[왕초보] 플러터(Flutter)로 시작하는 앱개발 종합반 v0
0주차
북마크
박*린
댓글
5
추천
0
조회수
9
조회수
9
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.

2주차 과제를 하는 중이었습니다. 뼈대로 주신 코드 중에서 2주차를 수정하여서 하던 도중에 TabBarView의 오류가 났다는 멘트가 나오면서 에뮬레이터가 돌아 가지 않고 하얀 화면만을 띄운 채 멈췄습니다.

스파르타 즉문즉답


해당 오류가 어떻게 나온 것인지 와 어디 부분을 수정 해야 하는 것일까요?

사이즈 미스로 인하여 생기는 문제가 맞을까요?





작성한 코드 및 에러 메세지

오류 발생 시, 작성한 코드 전체와 에러 메시지를 첨부해 주세요.

Tip 1) </> 아이콘을 import 'package:flutter/material.dart';


void main() {

  runApp(const MyApp());

}


class MyApp extends StatelessWidget {

  const MyApp({Key? key}) : super(key: key);


  // This widget is the root of your application.

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      debugShowCheckedModeBanner: false,

      title: 'Shazam',

      theme: ThemeData(

        primarySwatch: Colors.blue,

      ),

      home: HomePage(),

    );

  }

}


class HomePage extends StatefulWidget {

  const HomePage({Key? key}) : super(key: key);


  @override

  State<HomePage> createState() => _HomePageState();

}


class _HomePageState extends State<HomePage> {

  @override

  Widget build(BuildContext context) {

    return DefaultTabController(

      initialIndex: 1,

      length: 3,

      child: Builder(builder: (context) {

        DefaultTabController.of(context)?.addListener(() {

          setState(() {});

        });


        return Scaffold(

          body: Stack(

            children: [

              TabBarView(

                children: [

                  FirstTab(),

                  SecondTab(),

                  ThirdTab(),

                ],

              ),

              SafeArea(

                child: Padding(

                  padding:

                      const EdgeInsets.symmetric(vertical: 20, horizontal: 16),

                  child: Column(

                    children: [

                      Container(

                        alignment: Alignment.topCenter,

                        child: TabPageSelector(

                          color: DefaultTabController.of(context)?.index == 1

                              ? Colors.blue[300]

                              : Colors.grey[400],

                          selectedColor:

                              DefaultTabController.of(context)?.index == 1

                                  ? Colors.white

                                  : Colors.blue,

                          indicatorSize: 8,

                        ),

                      ),

                    ],

                  ),

                ),

              ),

            ],

          ),

        );

      }),

    );

  }

}


// 첫번째 페이지

class FirstTab extends StatelessWidget {

  const FirstTab({Key? key}) : super(key: key);


  @override

  Widget build(BuildContext context) {

    const songs = [

      {

        'imageUrl': 'https://i.ytimg.com/vi/jAO0KXRdz_4/hqdefault.jpg',

        'title': '가을밤에 든 생각',

        'artist': '잔나비',

      },

      {

        'imageUrl': 'https://i.ytimg.com/vi/jAO0KXRdz_4/hqdefault.jpg',

        'title': '가을밤에 든 생각',

        'artist': '잔나비',

      },

      {

        'imageUrl': 'https://i.ytimg.com/vi/jAO0KXRdz_4/hqdefault.jpg',

        'title': '가을밤에 든 생각',

        'artist': '잔나비',

      },

      {

        'imageUrl': 'https://i.ytimg.com/vi/jAO0KXRdz_4/hqdefault.jpg',

        'title': '가을밤에 든 생각',

        'artist': '잔나비',

      },

      {

        'imageUrl': 'https://i.ytimg.com/vi/jAO0KXRdz_4/hqdefault.jpg',

        'title': '가을밤에 든 생각',

        'artist': '잔나비',

      },

      {

        'imageUrl': 'https://i.ytimg.com/vi/jAO0KXRdz_4/hqdefault.jpg',

        'title': '가을밤에 든 생각',

        'artist': '잔나비',

      },

    ];


    return Center(child: Text('첫번째 페이지'));

  }

}


// 두번째 페이지

class SecondTab extends StatelessWidget {

  const SecondTab({Key? key}) : super(key: key);


  @override

  Widget build(BuildContext context) {

    return Container(

        decoration: BoxDecoration(

          gradient: LinearGradient(

              begin: Alignment.topCenter,

              end: Alignment.bottomCenter,

              colors: [Colors.blue[300]!, Colors.blue[900]!]),

        ),

        child: SafeArea(

            child: Column(children: [

          Padding(

              padding:

                  const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),

              child: Row(

                children: [

                  GestureDetector(

                      onTap: () {

                        DefaultTabController.of(context);

                      },

                      child: Column(children: [

                        Icon(Icons.person, color: Colors.white),

                        Text(

                          "라이브러리",

                          textAlign: TextAlign.center,

                        ),

                        Expanded(

                          child: Container(),

                        ),

                        GestureDetector(

                          onTap: () {

                            DefaultTabController.of(context);

                          },

                          child: Column(children: [

                            Icon(Icons.show_chart, color: Colors.white),

                            Text(

                              "차트",

                              textAlign: TextAlign.center,

                              style: TextStyle(color: Colors.white),

                            ),

                          ]),

                        ),

                      ]))

                ],

              )),

          SizedBox(height: MediaQuery.of(context).size.height * 0.1),

          Text(

            "Shazam하려면 탭하세요",

            style: TextStyle(

              color: Colors.white,

              fontSize: 24,

              fontWeight: FontWeight.bold,

            ),

          ),

          SizedBox(height: MediaQuery.of(context).size.height * 0.06),

          Container(

            alignment: Alignment.center,

            width: 200,

            height: 200,

            decoration: BoxDecoration(

              color: Colors.blue[300],

              shape: BoxShape.circle,

            ),

            child: Image.network(

              "https://i.ibb.co/hxNbZ8p/shazam.png",

              color: Colors.white,

              width: 130,

              height: 130,

            ),

          ),

          SizedBox(height: MediaQuery.of(context).size.height * 0.12),

          Container(

            width: 50,

            height: 50,

            alignment: Alignment.center,

            decoration: BoxDecoration(

              color: Colors.blue[400],

              shape: BoxShape.circle,

            ),

            child: Icon(

              Icons.search,

              color: Colors.white,

              size: 30,

            ),

          )

        ])));

  }

}


// 세번째 페이지

class ThirdTab extends StatelessWidget {

  const ThirdTab({Key? key}) : super(key: key);


  @override

  Widget build(BuildContext context) {

    const chartData = {

      'korea': [

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

      ],

      'global': [

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

      ],

      'newyork': [

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

        {

          'imageUrl': 'https://i.ibb.co/xf2HpfG/dynamite.jpg',

          'name': 'Dynamite',

          'artist': 'BTS',

        },

      ],

    };


    return Center(child: Text('세번째 페이지'));

  }

}

눌러 코드박스를 만들어 보세요.

Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!




취소
 공유
취소
댓글 0
댓글 알림
나의얼굴