seong

Flutter - Flutter with Python (2) 파이썬 결과 값 View로 보여주기 본문

Flutter/Flutter

Flutter - Flutter with Python (2) 파이썬 결과 값 View로 보여주기

hyeonseong 2024. 5. 17. 16:54

이전 포스팅 : https://seong9566.tistory.com/378

실행 되는 방식은 아래와 같다.

1. 파이썬 결과 값을 저장할 폴더 및 파일 생성(create)
2. Flutter ->파이썬 스크립트 호출
3. 파이썬 스크립트 실행
4. 파이썬에서 스크립트 실행 후 결과 값을 생성한 파일에 write
5. Flutter에서 생성된 파일 read
 
위 방식으로 Flutter <-> Python간 데이터를 주고 받았다.


1. Flutter 코드 

  Future<void> initPlatformState() async {
    String? pyResult;

// 결과 값 저장할 폴더 생성(create)
    Directory tempDir =
        await (await getTemporaryDirectory()).createTemp("seong_test");
    print("tempDir: ${tempDir.path}");

// 폴더 안에 output.text라는 파일 생성
    String out = path.join(tempDir.path, "output.text");
    print("out: ${out}");

// 파이썬 코드 실행 및 생성한 파일 경로 전달
// RESULT_VAULE를 넣으면 원하는 변수 값을 python으로 전달 할 수 있다.
    await SeriousPython.run(
      _pyFileName,
      environmentVariables: {
        "RESULT_FILENAME": out,
      },
      sync: true,
    );

// 생성된 파일에서 데이터 read
    var outFile = File(out);
    print("outFile: ${outFile.path}");
    if (await outFile.exists()) {
      pyResult = await outFile.readAsString();
      
      /// 데이터 모두 read했으면 생성된 파일 삭제
      outFile.delete();
      tempDir.delete();
    }

    if (!mounted) return;

    setState(() {
      _pyResult = pyResult ?? "Error: No output from Python script";
    });
  }

 

2. Python 코드 

데이터 write할 때 type에 주의 해야함
import os

// 1~10 까지 더하는 함수 
def sum_numbers():
    total = 0
    for i in range(1, 11):
        total += i
    return total

result = sum_numbers()
print("1부터 10까지의 합:", result)

// Flutter에서 생성한 파일 명
result_filename = os.getenv("RESULT_FILENAME")

// 파일을 열어 데이터를 write
with open(result_filename, "w") as f:
    f.write(str(result))

실행 결과

- 버튼 클릭 후 결과 값을 Result에 불러옴!

 
실행 후 경로에 들어가서 폴더와 파일이 올바르게 생성 되어 있는지도 확인

 

Git 코드 
https://github.com/seong9566/flutter_with_python

 

GitHub - seong9566/flutter_with_python

Contribute to seong9566/flutter_with_python development by creating an account on GitHub.

github.com