커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
2주차 숙제 코드 작성 중 오류 질문 드립니다.
[왕초보] 플러터(Flutter)로 시작하는 앱개발 종합반 v0
0주차
북마크
윤*찬
댓글
1
추천
0
조회수
6
조회수
6
답변 완료

안녕하세요.


수강생 윤정찬입니다.


2주차 숙제 코드 작성 중 아래와 같은 오류가 발생하여 질문 드립니다.


-----

<작성 코드>


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(

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[200]!, 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)!.animateTo(0);

},

child: Column(

children: [

Icon(

Icons.person,

color: Colors.white,

),

Text(

"라이브러리",

style: TextStyle(color: Colors.white),

),

],

),

),

Spacer(),

GestureDetector(

onTap: () {

DefaultTabController.of(context)!.animateTo(2);

},

child: Column(

children: [

Icon(

Icons.show_chart,

color: Colors.white,

),

Text(

"차트",

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(

alignment: Alignment.center,

width: 50,

height: 50,

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 SafeArea(

child: Column(

children: [

Text(

'차트',

style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),

),

SizedBox(height: 18),

Expanded(

child: ListView(

children: [

Stack(

alignment: Alignment.center,

children: [

Container(

height: 180,

width: double.infinity,

color: Colors.purple[900],

),

Column(

children: [

Container(

width: MediaQuery.of(context).size.width * 0.8,

child: ElevatedButton(

onPressed: () {},

style: ButtonStyle(

backgroundColor:

MaterialStateProperty.all(Colors.white),

),

child: Text(

"국가 및 도시별 차트",

style: TextStyle(

color: Colors.purple[900],

fontWeight: FontWeight.bold,

),

),

),

),

SizedBox(height: 8),

Text(

"전 세계",

style: TextStyle(

color: Colors.white,

fontWeight: FontWeight.bold,

),

),

],

)

],

),

Container(

width: double.infinity,

height: 8,

color: Colors.grey[400],

),

Row(

children: [

Text(

"대한민국 차트",

style: TextStyle(fontSize: 16),

),

Spacer(),

Text(

"모두 보기",

style: TextStyle(color: Colors.blue),

)

],

),

Row(

children: chartData['korea']!.map((element) {

String imageUrl = element['imageurl']!;

String name = element['name']!;

String artist = element['artist']!;


return Column(

children: [

Image.network(imageUrl),

Text(name),

Text(artist),

],

);

}).toList(),

),

],

),

),

],

),

);

}

}

스파르타 즉문즉답



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