-
글쓴이글
-
2022년 2월 9일 10:02 #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>2022년 2월 9일 13:51 #26832
codingapple키 마스터widget.data.add(widget.more);
부모에서 받아온 state는 자식에서 직접 수정할 수 없습니다 부모에서 state변경함수 만들어서 이용하셔야합니다
more도 [] 이런 자료형이라 add() 쓰면 잘 안될수도요
-
글쓴이글
- 답변은 로그인 후 가능합니다.