개발자
locate.dart를 만들어서 import 'package:geolocator/geolocator.dart'; class Locate{ Future<List<double>> location() async { List<double> m_l = []; // 위치 권한 요청 LocationPermission permission = await Geolocator.requestPermission(); // 현재 위치 가져오기 Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high); // 위치 정보 리스트에 추가 m_l.add(position.longitude); m_l.add(position.latitude); return m_l; // 위치 정보를 포함한 리스트 반환 } Future<List<double>> get_loc() async { // 위치 정보를 가져오기 List<double> location = await this.location(); // 수정된 부분 return location; // 위치 정보를 포함한 리스트 반환 } } 를 작성하였구요 main_screen.dart 라는 파일에서 함수를 생성해서 my_locate() async{ Locate locator = Locate(); // 위치 정보 가져오기 List<double> location = await locator.get_loc(); } @override Widget build(BuildContext context) { // 함수 실행은 //요 부분에서 return Scaffold( 이 부분 안에서 실행시킬려고 하는데 자꾸 오류가 걸리네요. 방법 알려주실 분 있나요?
답변 0
첫 답변을 기다리고 있어요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 02월 08일
Flutter에서는 UI를 만드는 코드(즉, `build` 메소드) 내에서 직접적인 비동기 연산을 수행하는 것이 거의 불가능합니다. 왜냐하면 Flutter의 UI 구축 과정은 동기적이어야 하기 때문입니다. 따라서 `my_locate()` 함수를 실행하기 위해서는 다음과 같은 방법들을 사용할 수 있습니다: 1. `initState()` 라이프사이클 메소드 안에서 실행하기: ```dart @override void initState() { super.initState(); my_locate(); } ``` 다만, 이 경우에는 `initState()` 메소드가 비동기일 수 없으므로 Future 결과를 대기할 수 없습니다. 2. FutureBuilder 위젯 사용하기: FutureBuilder는 비동기 연산에 기반한 위젯을 만들 때 유용합니다: ```dart @override Widget build(BuildContext context) { return FutureBuilder<List<double>>( future: my_locate(), builder: (BuildContext context, AsyncSnapshot<List<double>> snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Text('Error: ${snapshot.error}'); } else { // 데이터를 받아오고 나서의 UI 처리 // 예컨데, snapshot.data[0]은 경도 정보, snapshot.data[1]은 위도 정보를 표현 return Text('Longitude: ${snapshot.data[0]}, Latitude: ${snapshot.data[1]}'); } }, ); } ``` 3. `StatefulWidget` 을 뜻하는 클래스에 Future 변수 정의하기: ```dart class _MyHomePageState extends State<MyHomePage> { Future<List<double>> location; @override void initState() { super.initState(); location = my_locate(); } // 나머지 코드 (build 메소드 등) } ``` 이렇게 하면, `location` future를 원하는 곳에서 사용할 수 있습니다. 예를 들어, `FutureBuilder`를 사용하거나 `build` 메소드 안에서 `then()`을 사용하여 future가 완료되었을 때 다른 동작을 수행하도록 만들 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!