【Flutter/Dart】テキストファイルの読み込み・保存

Flutterでテキストファイルの読み込み・保存する方法について整理しました。

【Flutter】テキストファイルの読み込み・保存

dart:ioライブラリで、CSVファイルの読み込みができます。

関連記事
1 【Dart入門】ファイルの読み書き操作(text、csvなど)

実行例

【サンプルコード】Flutter + Dart

Flutter + Dartで実装したサンプルコードは以下の通りです。

■lib/main.dart

import 'dart:async';//非同期処理用ライブラリ
import 'dart:io';//ファイル出力用ライブラリ
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart'; //アプリがファイルを保存可能な場所を取得するライブラリ

//テキストフィールドの状態を管理するためのクラス
final _textController = TextEditingController();
final _fileName = 'savedata.txt'; //出力するテキストファイル名

void main() => runApp(MyApp());

//ステートレス
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'サンプルアプリ',
      theme: new ThemeData.dark(),
      home: FilePage (title: 'サンプルアプリ'),
    );
  }
}

class FilePage extends StatefulWidget {
  FilePage ({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _FilePageState createState() => _FilePageState();
}

//ステートフル
class _FilePageState extends State {
  String fileData = '';

  //ファイルの保存
  void saveButton() async {
    saveTxtFile(_textController.text);
  }

  //ファイルの読み込み
  void loadButton() async {
    setState(() {
      loadTxtFile().then((String value) {
        setState(() {
          fileData = value;
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        //title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('テキスト入力'),
            Padding(
              padding: EdgeInsets.all(2.0),
              child: TextField(
                autofocus: true,
                controller: _textController, // テキスト入力欄
                decoration: InputDecoration(icon: Icon(Icons.arrow_forward)),
              ),
            ),
            // ボタンタップでsaveButtonメソッド、loadButtonメソッドを呼び出し
            Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                RaisedButton(child: Text('保存'), onPressed: saveButton),
                RaisedButton(child: Text('読込'), onPressed: loadButton),]
            ),

            // 読み込んだファイルの中身を表示
            Padding(
                padding: EdgeInsets.all(2.0),
                child: Text(fileData, )),
          ],
        ),
      ),
    );
  }
}

//テキストファイルを保存するパスを取得する
Future getFilePath() async {
  final directory = await getTemporaryDirectory();
  return File(directory.path + '/' + _fileName);
}

//テキストファイルの読み込み
Future loadTxtFile() async {
  final file = await getFilePath();
  return file.readAsString();
}

//テキストファイルの読み込み
Future saveTxtFile(String data) async {
  getFilePath().then((File file) {
    file.writeAsString(data);
  });
  return 0;
}

pubspec.yaml

name: app
description: A new Flutter application.
version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter

  path_provider: ^0.5.0+1
flutter:

  uses-material-design: true 
- 関連記事
1 【Flutter入門】iOS、Android、Windowsアプリ開発
flutter
技術雑記

コメント

タイトルとURLをコピーしました