• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Flutter 게시판 Listview가 4번째 게시글을 보여주지 않습니다.

Listview가 4번째 게시글을 보여주지 않습니다.

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #45623

    최주원
    참가자
    무지성 질문 안하려고 하루정도 시행착오를 거쳤는데 해결이 안되서 질문 남깁니다.
    widget.data가 달라보여서 한줄 넘어갈 때마다 print(widget.data)해보며 확인했는데
    getMore()에서는 분명 data에 4번째 게시글이 add되어서 잘 print되는데
    3개까지밖에 뜨질 않습니다.
    
    NullCheck도 해보려고 ??도 써보고 Futurebuilder도 써보고 if ( statusCode == 200) 어쩌구도 써보고 했는데
    모르겠어요 ㅠㅠ
    
    
    ---------------------------------------------------------
    (코드전문)
    
    import 'package:flutter/material.dart';
    import './style.dart' as style; // 경로 갖다쓰고 작명할 수 있음 ...import할 때 중복문제 피하기
    import 'package:http/http.dart' as http;
    import 'dart:convert';
    import 'package:flutter/rendering.dart'; //스크롤 높이를 다룰 때 import 해야 함
    void main() {
      runApp(MaterialApp(
          theme: style.theme, //CSS같은 것임
          home: MyApp()
      )
      );
    }
    
    
    class MyApp extends StatefulWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      State<MyApp> createState() => _MyAppState();
    }
    class _MyAppState extends State<MyApp> {
      var tab = 0;
      var data = [];
      addData(a) {
        setState(() {
          data.add(a);
          print(data);
        });
      }
      getdata() async {
        var result = await http.get(Uri.parse('https://codingapple1.github.io/app/data.json'));
        // if (result.statusCode == 200 ) { //보통 result 전송이 성공하면 200이 됨
        //   //성공시 진행할 코드
        // } else {
        //   //실패시 진행할 코드
        // }
        var result2 = jsonDecode(result.body); //await 안쓰면 에러남 중요
        setState((){
          data = result2;
        });
      }
      @override
      void initState() {
        super.initState();
        getdata();
      }
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Instagram', textScaleFactor: 1.8,),
            actions: [
              IconButton(
                icon: Icon(Icons.add_box_outlined),
                iconSize: 50,
                onPressed: (){},
              ),
            ],
          ),
          body: Bus(data: data, getdata: getdata(), addData : addData),
          bottomNavigationBar: BottomNavigationBar(
            showSelectedLabels: false,
            showUnselectedLabels: false,
            onTap: (i){
              setState(() {
                tab = i;
              });
            },
            items: [
              BottomNavigationBarItem(
                icon: Icon(Icons.home_outlined),
                label : '집',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.shopping_bag_outlined),
                label:'쇼핑백',
              )
            ],
          ),
        );
      }
    }
    class Bus extends StatefulWidget {
      const Bus({Key? key, this.data, this.getdata,this.addData}) : super(key: key);
      final data;
      final addData;
      final getdata;
      @override
      State<Bus> createState() => _BusState();
    }
    class _BusState extends State<Bus> {
      var scroll = ScrollController();
      getMore() async {
        var result = await http.get(
            Uri.parse('https://codingapple1.github.io/app/more1.json')); //보통 result 전송이 성공하면 200이 됨
          FutureBuilder(future: http.get(
              Uri.parse('https://codingapple1.github.io/app/more1.json')),builder: jsonDecode(result.body));
          widget.addData(jsonDecode(result.body)); //성공시 진행할 코드
      }
      @override // 시작하자마자 실행하는 구역
      void initState() {
        super.initState();
        scroll.addListener(() { // **addlistener 켜주기
          print(scroll.position.pixels);
          if (scroll.position.pixels ==
              scroll.position.maxScrollExtent) { //맨밑까지 스크롤이 내려오면 밑의 코드를 실행
             getMore();
          }
        });
      }
      @override
      Widget build(BuildContext context) {
        if (widget.data.isNotEmpty){   // 실제 데이터가 도착하면! 실행해줌 왜냐하면 데이터 전송에는 시간이 걸리기 때문에
          return ListView.builder(itemCount: widget.data.length, controller: scroll ,itemBuilder: (c,i) { //controller에 scroll 장착
            return Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Image.network (widget.data[i]['image'] ?? "이름없는사람"),
                Text('좋아요 ${widget.data[i]['likes']}'), //달러쓰면 합쳐져서 나타남 여기서 null check하니까 오류 사라짐
                Text(widget.data[i]['data'] ?? "글 내용 없는 사람"),
                Text(widget.data[i]['content'] ?? "글 내용 역시 없네")
              ],
            );
          });
        } else {
          return Text('로딩중임');
        }
      }
    }
    #45642

    codingapple
    키 마스터
    Bus(data: data, getdata: getdata(), addData : addData),
    () 붙은게 이상해보입니다
    #45669

    최주원
    참가자
    헉 해결됐네요 감사합니다 ㅠ
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠