3 글 보임 - 1 에서 3 까지 (총 3 중에서)
-
글쓴이글
-
2022년 9월 7일 02:09 #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('로딩중임'); } } }
2022년 9월 7일 09:55 #45642
codingapple키 마스터Bus(data: data, getdata: getdata(), addData : addData), () 붙은게 이상해보입니다
-
글쓴이글
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
- 답변은 로그인 후 가능합니다.