future 로 가져온 json data map으로 정리하기
flutter
flutter 개발을 하면서 한 뻘짓을 기록한다. 이번 뻘짓은 futurebuild 에 관한 내용이다.
futuerbuild
데이터를 모두 다 받기 전에 그릴 수 없는 부분을 먼저 그려주기 위해 사용함
뻘짓
Rest Api로 json 데이터를 가져왔음. 메뉴 박스에 아이템을 동적으로 추가 해야 하는 상황임 select box 를 생각했지만 flutter 에는 DropdownButton 을 씀
안드로이드 환경에서는 Material, 아이폰 에서는 Cupertino 를 import 하여 환경을 맞춘다
Material 로 ios 에서 돌려봤을때 되기는 함 다만 안드로이드 ui로 나옴
DropdownButton 구조
DropdownButton<dynamic> DropdownButton({
Key? key,
required List<DropdownMenuItem<dynamic>>? items,
dynamic value,
Widget? hint,
required void Function(dynamic)? onChanged,
void Function()? onTap,
...길어서 생략
})
가져온 데이터를 모델링을 통해서 List
결국 map 쓰고 해결 함… map이 익숙하지 않아서 정리하고자 남겨놓는다
FutureBuilder<List<dynamic>>(
future: future,
builder: (context, snapshot) {
print("future");
if (snapshot.hasData) {
return DropdownButton<dynamic>(
hint: Text(""),
value: selectedValue,
items: snapshot.data!
.map<DropdownMenuItem<dynamic>>((val) =>
DropdownMenuItem<dynamic>(
child: Text(val['name'].toString()),
value: val['value']))
.toList(),
onChanged: (value) {
setState(() {
selectedValue = value;
});
},
);
} else if (snapshot.hasError) {
print("error data type = ${snapshot.data.runtimeType.toString()}");
print("error = ${snapshot.error}");
// return Text("${snapshot.error}");
}
return const CircularProgressIndicator();
},
),