inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 초급 - Http통신, 상태관리

provider 의 Consumer builder함수에서 반복문 사용 문제

397

홍정민

작성한 질문수 5

0

강사님 강의 잘 듣고 현재 간단한 프로젝트를 flutter로 만들고 있는데요.

저는 상태관리를 provider 방식으로 하고 있습니다.

궁금한점이 ListView에 게시글을 서버에서 받아서 복수개를 보여주는 로직인데요.

List<게시글 VO> 형식으로 Provider Model에 저장하고

Consumer 에서 반복문으로 게시글을 보여줍니다. 동작은 잘하는데 의문이

예를 들어

ListView에 200~300여개의 게시글을 보여준다고 하면  Consumer 내부에서 200~300회의 반복문이 수행되는데

그때 ListView에 보여지는 것이 문제가 없이 잘될까요?

일단 테스트로 ListView의 하단에 도달하면 2개씩 불러오는 코드에서는 잘 되는것 같습니다.

아니면 반복문 처리를 provider model 에서 미리 해놓고 Cosumner에서는 그대로 위젯 리스트를 리턴만 시키는게 좋을까요?

코드는 아래와 같습니다.

Consumer<RecruitModel>(
builder: (context,recruit,child){
List<Widget> resultList=[];
for(Recruit recruit in recruit.listInMain){
Widget recruitCard = _buildRecruitCard(
name:recruit.name,
regDate:recruit.regDate );
resultList.add(recruitCard);
}
return Column(
children: resultList,
);
},
)


class RecruitModel with ChangeNotifier{
var client = http.Client();
var listInMain=[];
var listInSearch=[];

void getListInMain({var start, var cnt}) async{
var requestUrl = clientUrl+'/rc_grlbc';
Uri uri = Uri.parse(requestUrl);
var urlWithParam = uri.replace(queryParameters: {
'start':start.toString(),
'cnt':cnt.toString()
});
try{
var response = await client.get(urlWithParam);
var list = jsonDecode(response.body);
var tempList=[];
for(int i=0;i<list.length;i++){
Recruit recruit = Recruit.fromJson(list[i]);
tempList.add(recruit);
}
listInMain..addAll(tempList);
}catch(e){
print('e : $e');
}
notifyListeners();
}
}

Flutter 웹앱 android ios

답변 1

0

오준석

반복문이 하는 동작이 UI를 만드는 동작이므로 RecruitModel 에서 하는 것은 아닌 것 같습니다. RecruitModel 에서는 지금처럼 로직만 수행하는 것이 맞습니다. 따라서 지금 하고 있는 코드가 특별히 문제가 있어 보이지는 않습니다.

다만 제가 경험한 바로는 플러터에서 많은 양의 아이템을 가진 ListView나 GridView의 경우 스크롤시 버벅거림 현상이 있었습니다.

지금 하신대로 Column 에서는 어떨지 모르겠네요.

코드 자체로는 큰 문제는 없어 보입니다.

참고로 다음과 같이 함수형 코드를 활용하면 코드를 좀 더 간결하게 하실 수도 있습니다.

Consumer<RecruitModel>(

  builder: (context,recruit,child){    

    return Column(

      children: recruit.listInMain.map((recruit) => _buildRecruitCard(

        name:recruit.name,

        regDate:recruit.regDate,

      )).toList(),

    );

  },

)

ListenableBuilder가 안되요..material import 했는데도 자동완성이 안뜨고 빨간줄이 뜨네요 ..

0

150

2

pubspec.yaml 파일에서 Pub get이 안됩니다.

0

889

1

[네이티브연동 관련 질문]

0

334

1

네이티브코드 연동할때 네이티브 디버깅은 어떻게 하나요?

0

477

1

CartBloc 대체 코드 올립니다.

0

455

2

강사님처럼 코드가 화면 범위 밖으로 나갔을 때 자동으로 줄바꿈은 어떻게 하나요?

0

969

1

ShowSnackBar Undefined 오류

0

419

1

null 관련 오류

0

318

1

화면새로고침 질문.

0

1491

1

flutter 멀티이미지업로드 질문

0

686

1

fluuter php mysql 글작성

0

435

2

플러터 서버에 이미지 저장하기

0

880

1

오류 질문입니다.

0

258

1

강의를 보다 listview 기능에 의문이 생겨 질문드립니다.

0

748

1

inheritedFromWidgetOfExactType 가 없습니다.

0

231

1

The operator '<' can't be unconditionally invoked because the receiver can be 'null'.

0

1114

1

해결이 어려운 부분이 있습니다 ㅠㅠ

0

1243

2

네이티브코드 연동 AS 21.11.11 update 영상 중

0

213

1

특정 함수로의 객체 전달 방법 문의 드립니다.

0

467

1

플러터 최적의 폴더 구조를 잡고 싶습니다.

0

1029

1

mainActive.kt 오류

0

318

1

xcode 오류가 납니다.

0

360

1

dart 2.12 이상 버전에서 json object null safety 처리는 어떻게 하나요?

0

631

1

json to dart

0

177

1