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

home2 게시판 Flutter 게시판 인스타 더보기 두번째 게시물

인스타 더보기 두번째 게시물

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

    Chris
    참가자

    1. 인스타 더보기 응용 두번째 게시물 화면 스크롤하면 계속 게시물이 추가 됩니다. 코딩내용을 보면 정상적인 부분이긴 한거 같은대 (스크롤 포지션 맥스이면 getMore(); 함수 실행) 제가 잘못 한건지 아니면 정상적인건지 판단이 안됩니다.

    2. 강의 코멘트에 유저가 get 요청한 횟수 기록하면 편리하다고 하셨는대 해야 하는 이유와 방법을 잘 모르겠습니다. get 횟수 기록하지 않아도 addData에 파라미터 추가해서 구현은 되었습니다만 제대로 구현한건지 모르겠네요.

    <코드>

    void main() {
    runApp(MaterialApp(
    title: 'Jjabstagram',
    theme: style.theme,
    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 = [];

    getData() async {
    var result = await http
    .get(Uri.parse('https://codingapple1.github.io/app/data.json'));

    if (result.statusCode == 200) {
    var result2 = jsonDecode(result.body);

    setState(() {
    data = result2;
    });
    } else {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
    content: Text(
    '서버 연결이 원활하지 않습니다.',
    ),
    duration: Duration(seconds: 5),
    ));
    }
    }

    addData(a,b) {
    setState(() {
    data.addAll({a,b});
    });
    }

    @override
    void initState() {
    // TODO: implement initState
    super.initState();
    getData();
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Instagram'),
    actions: [
    IconButton(
    onPressed: () {},
    icon: Icon(Icons.add_box_outlined),
    iconSize: 30,
    ),
    ],
    ),
    body: [Home(data: data, addData: addData), Text('첫번째')]

    ,
    bottomNavigationBar: BottomNavigationBar(
    showUnselectedLabels: false,
    showSelectedLabels: false,
    currentIndex: tab,
    onTap: (i) {
    setState(() {
    tab = i;
    });
    },
    items: [
    BottomNavigationBarItem(
    icon: Icon(Icons.home_outlined),
    activeIcon: Icon(Icons.home),
    label: 'home'),
    BottomNavigationBarItem(
    icon: Icon(Icons.shopping_bag_outlined),
    activeIcon: Icon(Icons.shopping_bag),
    label: 'shopping',
    ),
    ]),
    );
    }
    }

    class Home extends StatefulWidget {
    const Home({Key? key, this.data, this.addData}) : super(key: key);

    final data;
    final addData;

    @override
    State<Home> createState() => _HomeState();
    }

    class _HomeState extends State<Home> {
    var scroll = ScrollController();

    getMore() async {
    var result = await http
    .get(Uri.parse('https://codingapple1.github.io/app/more1.json'));
    var result2 = jsonDecode(result.body);
    var result3 = await http
    .get(Uri.parse('https://codingapple1.github.io/app/more2.json'));
    var result4 = jsonDecode(result3.body);

    widget.addData(result2, result4);
    }

    @override
    void initState() {
    // TODO: implement initState
    super.initState();
    scroll.addListener(() {
    if (scroll.position.pixels == scroll.position.maxScrollExtent) {
    getMore();
    }

    });
    }

    @override
    Widget build(BuildContext context) {
    if (widget.data.isNotEmpty) {
    print(widget.data.length);
    return ListView.builder(
    itemCount: widget.data.length,

    controller: scroll,
    itemBuilder: (context, i) => Column(
    children: [
    Image.network(widget.data[i]['image']),
    Container(
    constraints: BoxConstraints(maxWidth: 600),
    padding: EdgeInsets.all(20),
    child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
    Text('좋아요: ${widget.data[i]['likes']}'),
    Text('글쓴이: ${widget.data[i]['user']}'),
    Text('글내용: ${widget.data[i]['content']}'),
    ],
    ),
    ),
    ],
    ));
    } else {
    return CircularProgressIndicator();
    }
    }
    }
     

    #26973

    codingapple
    키 마스터

    1은 정상입니다 스크롤바 체크하는 코드들은 여러번 동작합니다 

    더보기 게시물이 10개나 있다면

    지금 몇번 게시물을 보고있는지 어딘가에 기록해놔야 다음 게시물을 몇번째 가져올 지 아니까 유용할듯요 

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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