플러터 통신

김인범's avatar
Jan 13, 2025
플러터 통신

통신X, 박혀있던 데이터 가져오는 코드

home_body

import 'package:flutter/material.dart'; import 'package:mockapp/home_repository.dart'; class HomeBody extends StatelessWidget { @override Widget build(BuildContext context) { HomeRepository repo = const HomeRepository(); int one = repo.getOne(); List<int> list = repo.getList(); return Column( children: [ Text("$one", style: TextStyle(fontSize: 50)), Expanded( child: ListView.builder( itemCount: list.length, itemBuilder: (context, index) { return ListTile(leading: Text("${list[index]}"),title: Text("내용")); }), ), ], ); } }

home_repository

// SRP : 데이터를 가져오는 곳 // (휴대폰 디바이스(파일), 휴대폰 DB, Firebase(외부서버), 내 서버, 공공데이터서버) class HomeRepository { const HomeRepository(); List<int> getList() { return [1,2,3,4]; } int getOne() { return 1; } }

Flutter 비동기 통신하는 법

await / async 사용한다.
Future가 사용된다.
Future == Promise
// SRP : 데이터를 가져오는 곳 (휴대폰 디바이스(파일), 휴대폰 DB, Firebase(외부서버), 내 서버, 공공데이터서버) class HomeRepository { const HomeRepository(); // 반환 타입 Future<실제 받을 반환타입> <-형태 기억하기 Future<List<int>> getList() async { // 비동기 / response는 promise데이터 List<int> response = await Future.delayed(Duration(seconds: 3), () { // 3초 후 실행됨.. return [1,2,3,4]; },); return response; } Future<int> getOne() async{ int response = await Future.delayed(Duration(seconds: 3), () { // 3초 후 실행됨.. return 5; },); return response; } }
반환타입 형태와 전체 형태: Future<실제 반환 될 타입> 함수명() async{ }
 

future_body

import 'package:flutter/material.dart'; import 'package:mockapp/home_repository.dart'; class FutureBody extends StatelessWidget { @override Widget build(BuildContext context) { HomeRepository repo = const HomeRepository(); return Column( children: [ FutureBuilder( future: repo.getOne(), builder: (context, snapshot) {// 다운로드 끝났을 때 결과값 > 스냅샵으로간다. if(snapshot.hasData){ // 스냅샵이 데이터를 가지고 있으면 그림 그려짐 return Center(child: Text("1", style: TextStyle(fontSize: 50))); }else{ // 안가지고 있으면 다른 그림... return CircularProgressIndicator(); } }, ), Expanded( child: ListView.builder( itemCount: 4, itemBuilder: (context, index) { return ListTile( leading: Text("${index + 1}"), title: Text("내용")); }), ), ], ); } }
Share article

taker