커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
StatefulWidget과 클래스명
[왕초보] 플러터(Flutter)로 시작하는 앱개발 종합반 v0
2주차
북마크
허*
댓글
63
추천
0
조회수
40
조회수
40
답변 완료

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

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


44번, 47번에 빨간 줄이 생겼는데 어떻게 처리해야 할 지 모르겠습니다.


에러 메세지는 _FeedState()가 Feed 클래스에 정의되지 않았다는 것 인데, StatefulWidget으로 여러 개 클래스를 생성해도 되나요?

제가 짠 코드에 대한 전반적인 이해가 필요한 상황입니다. 코딩 방향을 어떻게 잡아줘야 하는지 궁금합니다.


// import 'dart:html';


import 'package:flutter/cupertino.dart';

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: 'Element',

      theme: ThemeData(

        primarySwatch: Colors.blue,

      ),

      home: HomePage(),

    );

  }

}


class Feed extends StatefulWidget {

 const Feed({

 Key?key,

 required this.imageUrl, // Feed 위젯 호출시 전달 9번

 required this.textContent,

 required this.specContent,

 required this.valueContent, // 글자를 담을 변수 ==*======  

 }) :super(key:key);

 

 final String imageUrl; // )이미지를 담을 변수 전달 26번

 final String textContent;

 final String specContent; // 글자를 담을 변수 ==*======    

 final String valueContent;

 @override

 State<Feed> createState() => _FeedState(); // _HomePageState(); //

}


class _FeedState extends State<Feed> {

 @Override

 

}



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) {

 final List<String> images = [

    "https://www.laboratuar.com/images/rh-rodyum-cevher-mineral-analizi.jpg",

    "https://www.mastah.org/wp-content/uploads/2017/11/Sesium-Cesium-Cs-Penjelasan-Sifat-dan-Kegunaan.jpg",

    "https://cdn2.thecatapi.com/images/6bt.jpg",

    "https://periodic-table.io/images/elements/Sc.jpg",

    "https://i0.wp.com/periodic-table.com/wp-content/uploads/2019/01/Thulium.jpg?resize=248%2C203&ssl=1",

   ];

   // ignore: unused_local_variable

   final List<String> text1 = [

    'Rh(로듐)', 'Cs(세슘)', 'Lu(루테늄)', 'Sc(스칸듐)', 'Tm(툴륨)'

   ];


   final List<String> spectext1 = [

    '분말 99.9% 1g', '금속(봉입) 1g', '작은 조각 99.9% 1g', 'ingot 99.9% 1g', '원형 작은 조각 1g'

   ];


      final List<String> valuetext1 = [

    '600,000원', '524,000원', '505,000원', '459,000원', '331,000원'

   ];


    return Scaffold( // AppBar icons 입력  

    appBar:AppBar(

        backgroundColor:Colors.white,//  " 백그라운드

        elevation:0.5,

        leading:Row(

         children: [

          SizedBox(width:10),

          Text(

           '원소의 가격 순위',

            style:TextStyle(

            color:Colors.black,

            fontWeight:FontWeight.bold,

            fontSize:20,

            ),

          ),

           Icon(

           Icons.keyboard_arrow_down_rounded,

           color:Colors.black,

          ),

          ],

         ),

         leadingWidth:1,                                                             // overflowed시 좀 크게

         actions: [

         IconButton(

          onPressed: () {},

          icon:Icon(CupertinoIcons.search, color:Colors.black),             // 문법err red~~에 mouse Quick Fix /ctrl ./import

         ),

         IconButton(

          onPressed: () {},

          icon:Icon(Icons.menu_rounded, color:Colors.black),

         ),

         IconButton(

          onPressed: () {},

          icon:Icon(CupertinoIcons.bell, color:Colors.black),

         ),

        ],

     ),

   body:Padding(                                                                //ListView >Wrap with Padding으로

    padding:const EdgeInsets.symmetric(horizontal:16),                              // padding: const Edge del> 코드스니펫.symmetric(hori~

    child:ListView.separated(                                                       // ListView를 Refactor >Wrap with Padding

      itemCount:images.length,                                                  // 이미지 개수만큼 보여주기**** itemCount: 10, >itemCount: images.length, <paste>

      itemBuilder: (context,index) {

        final image = images[index]; // index에 해당하는 이미지

        final text2 = text1[index]; // index에 해당하는 text꾸러미

        final spectext2 = spectext1[index];

        final valuetext2 = valuetext1[index];


        return Padding(

          padding:const EdgeInsets.symmetric(vertical:12),                //child: Feed(imageUrl: image), //imageUrl전달 child: Feed(), >

          child: Feed(

          imageUrl: image,

          textContent: text2,

          specContent: spectext2,

          valueContent: valuetext2,


          ), // ==*==-----제목입력------

        );

      },

      separatorBuilder: (context, index) {

      return Divider();

      },

     ),

    ),

      floatingActionButton: FloatingActionButton(

        onPressed: () {},

        backgroundColor: Color(0xFFFF7E36),

        elevation: 1,

        child: Icon(

          Icons.add_rounded,

          size: 36,

        ),

      ),

        bottomNavigationBar: BottomNavigationBar(

        fixedColor: Colors.black,

        unselectedItemColor: Colors.black,

        showUnselectedLabels: true,

        selectedFontSize: 12,

        unselectedFontSize: 12,

        iconSize: 28,

        type: BottomNavigationBarType.fixed,

        items: [

          BottomNavigationBarItem(

            icon: Icon(Icons.home_filled),

            label: '홈',

            backgroundColor: Colors.white,

          ),

          BottomNavigationBarItem(

            icon: Icon(Icons.my_library_books_outlined),

            label: '동네생활',

          ),

          BottomNavigationBarItem(

            icon: Icon(Icons.fmd_good_outlined),

            label: '내 근처',

          ),

          BottomNavigationBarItem(

            icon: Icon(CupertinoIcons.chat_bubble_2),

            label: '채팅',

          ),

          BottomNavigationBarItem(

            icon: Icon(

              Icons.person_outline,

            ),

            label: '나의 당근',

          ),

        ],

        currentIndex: 0,

      ),

    );

  //Center클릭->마우스 오른>Refactor/ctrl ./전구 >Wrap with Row :Center(child: Text("home page"))del

 

   

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

  }

}


// 두번째 페이지

class SecondTab extends StatelessWidget {

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


  @override

  Widget build(BuildContext context) {


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

  }

}


// 세번째 페이지

class ThirdTab extends StatelessWidget {

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


  @override

  Widget build(BuildContext context) {


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

  }

}

     






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