반응형
질문
나는 다음과 같이 문자열 목록을 정의했다:
var list = ["one", "two", "three", "four"];
나는 텍스트 위젯을 사용하여 화면에 값들을 옆으로 렌더링하고 싶다. 이를 위해 다음 코드를 사용해 보았다:
for (var name in list) {
return new Text(name);
}
그러나 이 코드를 실행할 때 for 루프는 한 번만 실행되고 목록의 첫 번째 항목인 one
만 렌더링되는 텍스트 위젯이 하나만 생성된다. 또한, for 루프 내부에 로그 메시지를 추가하면 한 번만 트리거된다. 왜 내 for 루프는 목록의 길이에 따라 루프하지 않는 걸까? 그것은 한 번만 실행되고 종료되는 것 같다.
답변
기본적으로 함수에서 'return'을 누르면 함수가 중지되고 반복이 계속되지 않습니다. 따라서 모두 목록에 넣고 위젯의 자식으로 추가해야합니다.
다음과 같은 작업을 수행 할 수 있습니다.
Widget getTextWidgets(List<String> strings)
{
List<Widget> list = new List<Widget>();
for(var i = 0; i < strings.length; i++){
list.add(new Text(strings[i]));
}
return new Row(children: list);
}
또는 더 나은 방법으로 .map() 연산자를 사용하여 다음과 같이 수행 할 수 있습니다.
Widget getTextWidgets(List<String> strings)
{
return new Row(children: strings.map((item) => new Text(item)).toList());
}
반응형
댓글