2017-05-15 2 views
0

문제는 다음과 같습니다. 한 줄의 텍스트가 들어있는 .txt 파일이 있고 그 줄을 String 변수로 읽어야합니다.Flutter에서 String 변수로 파일의 내용 읽기

내가 찾은 방법의 대부분은 미래 또는 미래를 반환하고 이러한 유형을 문자열로 변환하는 방법을 알지 못합니다. 또한, 내 pubspec.yaml에서 참조한 경우에도 "FileSystemExeption : 파일을 열 수 없습니다 (OS 오류 : 해당 파일 또는 디렉토리 없음)"메시지가 표시되기 때문에 readAsStringSync에서 잘못된 작업을 수행하고 있는지 확실하지 않습니다.

class LessonPage extends StatelessWidget { LessonPage({this.title, this.appBarColor, this.barTitleColor, this.fileName}); 
    final String title; 
    final Color appBarColor; 
    final Color barTitleColor; 
    final String fileName; 

    @override 
    Widget build(BuildContext context) { 

     final file = new File(this.fileName); 

     return new Scaffold(
     appBar: new AppBar(
      title: new Text(
        this.title, 
        style: new TextStyle(color: this.barTitleColor) 
       ), 
      backgroundColor: this.appBarColor, 
     ), 
     body: new Center(
      child: new Text(
      file.readAsStringSync(), 
      softWrap: true, 
     ) 
    ), 
); 
+0

https://flutter.io/assets-and-images/#loading-text-assets 무엇을 찾고 계십니까? –

+0

pubspec.yaml의 내용과 파일 이름을 게시 할 수 있습니까? –

답변

3

포옹 Future s! 이 유스 케이스는 정확히 FutureBuilder을위한 것입니다.

자산을 문자열로 읽으려면 File을 구성 할 필요가 없습니다. 대신 DefaultAssetBundle을 사용하여 저작물 파일에 액세스하십시오. 읽을 자산 파일이 pubspec.yaml에 선언되어 있는지 확인하십시오.

return new Scaffold(
     appBar: new AppBar(
     title: new Text(
      this.title, 
      style: new TextStyle(color: this.barTitleColor) 
     ), 
     backgroundColor: this.appBarColor, 
    ), 
     body: new Center(
     child: new FutureBuilder(
      future: DefaultAssetBundle.of(context).loadString(fileName), 
      builder: (context, snapshot) { 
      return new Text(snapshot.data ?? '', softWrap: true); 
      } 
     ), 
    ), 
    ); 

screenshot

당신은 자산이 아닌 파일을 읽고있는 경우 (예를 들어, 임시 폴더에 다운로드 한 파일) 다음은 File를 사용하는 것이 적절합니다. 이 경우 경로가 올바른지 확인하십시오. 더 나은 성능을 위해 동기 File API 대신 FutureBuilder을 사용하는 것이 좋습니다.