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

home2 게시판 Flutter 게시판 Insta 스크롤 더보기 실행시 type 에러 발생 문의

Insta 스크롤 더보기 실행시 type 에러 발생 문의

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

    Chris
    참가자

    인스타 스크롤 더보기 코드 작성 후 'Expected a value of type 'int', but got one of type 'String' 발생하여 문의 드립니다. main.dart와 pageA.dart 분리하여 작성시 스크롤 내리기 전까지는 문제가 없는대 내리면 에러가 발생하는대 원인을 알 수 없어 문의 드립니다.

    //<main.dart>

    import 'package:coding_apple_insta_0207/style.dart';
    import 'package:flutter/material.dart';
    import './style.dart' as style;
    import './pageA.dart';
    import './pageB.dart';
    import 'dart:convert';
    import 'package:http/http.dart' as http;
    // import 'package:dio/dio.dart' as dio;
    import 'package:flutter/rendering.dart';

    void main() {
    runApp(MaterialApp(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 = []; // state에 json변환 저장
    var more = [];

    getData() async {
    var result = await http.get(Uri.parse('https://codingapple1.github.io/app/data.json'),);
    var result2 = jsonDecode(result.body);
    setState(() {
    data = result2;
    }); // state 저장 위해 setState 사용용

    if (result.statusCode == 200) {
    print(jsonDecode(result.body));
    } else {
    throw Exception('실패함ㅅㄱ');
    }
    } // 서버에서 get 으로 url 호출
    // initState는 async 불가. 함수 만들어서 async 적용.

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

    setState(() {
    more = result4;
    }); // state 저장 위해 setState 사용용

    if (result3.statusCode == 200) {
    print(jsonDecode(result3.body));
    } else {
    throw Exception('실패함ㅅㄱ');
    }
    }

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

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

    ,

    bottomNavigationBar: BottomNavigationBar(
    showSelectedLabels: false,
    showUnselectedLabels: false,
    onTap: (i) {
    setState(() {
    tab = i;
    });
    // i 는 파라미터로 item (지금 누른 버튼) 번호임 0부터 시작
    },
    items: [
    BottomNavigationBarItem(icon: Icon(Icons.home_outlined), label: '홈'),
    BottomNavigationBarItem(
    icon: Icon(Icons.shopping_bag_outlined), label: '샵')
    ],
    ),
    );
    }
    }

     

    //<pageA.dart>

    import 'package:flutter/material.dart';
    import 'package:coding_apple_insta_0207/main.dart';
    import 'package:flutter/rendering.dart';

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

    final data;
    final more;

    @override
    State<pageA> createState() => _pageAState();
    }

    class _pageAState extends State<pageA> {
    var scroll = ScrollController();

    @override
    void initState() {
    // TODO: implement initState
    super.initState();
    scroll.addListener(() {
    if (scroll.position.pixels == scroll.position.maxScrollExtent) {
    setState(() {
    widget.data.add(widget.more);
    });

    }
    });
    }

    @override
    Widget build(BuildContext context) {
    print(widget.data);
    if (widget.data.isNotEmpty) {
    return Scaffold(
    body: ListView.builder(
    itemCount: widget.data.length,
    controller: scroll,
    itemBuilder: (context, i) {
    return Column(
    // crossAxisAlignment: CrossAxisAlignment.start,
    children: [
    Image.network(
    widget.data[i]['image'],
    ),
    Container(
    constraints: BoxConstraints(maxWidth: 600),
    width: double.infinity,
    padding: EdgeInsets.all(20),
    child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
    Text(
    '좋아요 ${widget.data[i]['likes'].toString()}',
    style: TextStyle(
    fontWeight: FontWeight.bold,
    ),
    ),
    Text(widget.data[i]['user']),
    Text(widget.data[i]['content']),
    ])),
    ],
    );
    }),
    );
    } else {
    return CircularProgressIndicator();
    }
    }
    }
    <pageA.dart>

     

     

    #26832

    codingapple
    키 마스터

    widget.data.add(widget.more);

    부모에서 받아온 state는 자식에서 직접 수정할 수 없습니다 부모에서 state변경함수 만들어서 이용하셔야합니다

    more도 [] 이런 자료형이라 add() 쓰면 잘 안될수도요

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 호 / 개인정보관리자 : 박종흠