エンジニアのブログ

Flutterで端末内のファイルを読み込むfile_picker

プログラミング

Flutterで端末内のファイルを読み込むためのパッケージ、file_pickerプラグインの使い方を紹介します。

file_picker | Flutter Package
A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension f...

Flutterのfile_picker使い方

pubspec.yamlに追加

dependencies:
  file_picker: ^1.4.3+2

Packages getをします。

後はインポートして使うだけです。
うまくいかない場合はホットリロードではなく、一旦端末との接続を切って再度実行してみてください。

import 'package:file_picker/file_picker.dart';
import 'dart:io';
File file = await FilePicker.getFile();

読み込んだファイルからデータを取得

String fileText = await file.readAsString();

AndroidのManifestファイルに権限を追加(リリース用ではおそらく必要)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

実装

画面の流れ

ソース一式

import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'dart:io';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'File Picker',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'File Picker'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String displayText = "ファイルの中身を表示";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(displayText),
            FlatButton(
              color: Colors.blue,
              textColor: Colors.white,
              child: Text("ファイル選択・取り込み"),
              onPressed: () async {
                // ファイルの取得
                File file = await FilePicker.getFile();
                // ファイルの中身を取得
                String fileText = await file.readAsString();
                // 画面に表示
                setState(() {
                  displayText = fileText;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

詳しくは下記の公式サイトを確認してください。

file_picker | Flutter Package
A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension f...

コメント