フラッターリストをCSVファイルにエクスポートする

アービタ

クラスのアイテムをListViewに一覧表示するこの画面があります。私が欲しいのは、そのリストをCSVファイルにエクスポートするボタン(コード内のFloatingActionButton)を用意することです。私はそれが見えるべきだと思うコードを持っていますが、私の問題は、エクスポートするためにボタンでonPressedを使用する方法がわからないことです、今のところそれはnullですが、getCSV()関数を呼び出す必要がありますその中の何か。コードは次のとおりです。

  class MailListAdmin extends StatefulWidget {
  @override
  _MailListAdminState createState() => _MailListAdminState();
}

class _MailListAdminState extends State<MailListAdmin> {

  List<String> list = [];
  List<Email> finalExport;



  @override
  void initState() {
    super.initState();
    DatabaseProvider.db.getMail().then(
      (mailList) {
        BlocProvider.of<MailBloc>(context).add(SetMail(mailList));
      },
    );
  }

  getCsv(List<Email> mailList) async {
    List<List<dynamic>> rows = List<List<dynamic>>();
    for (int i = 0; i < mailList.length; i++) {
      List<dynamic> row = List();
      row.add(mailList[i].id);
      row.add(mailList[i].email);
      rows.add(row);
      setState(() {
        mailList = finalExport;
      });
      print(rows);
    }
    await SimplePermissions.requestPermission(Permission.WriteExternalStorage);
    bool checkPermission = await SimplePermissions.checkPermission(
        Permission.WriteExternalStorage);
    if (checkPermission) {
      String dir =
          (await getExternalStorageDirectory()).absolute.path + "/documents";
      String file = "$dir";
      File f = new File(file + "filename.csv");
      String csv = const ListToCsvConverter().convert(rows);
      f.writeAsString(csv);
    }
  }

  //-------------------------------------

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.blueGrey[900],
        title: Text('Newsletter Users'),
        actions: [
          Padding(
              padding: EdgeInsets.only(right: 20.0),
              child: Badge(
                  child: Text('Copied ' + list.length.toString()),
                  showBadge: false)),
        ],
      ),
      body: Container(
        child: BlocConsumer<MailBloc, List<Email>>(
          builder: (context, mailList) {
            return ListView.separated(
              itemCount: mailList.length,
              itemBuilder: (BuildContext context, int index) {
                Email mail = mailList[index];
                return Card(
                  child: ListTile(
                    leading: GestureDetector(
                        child: Icon(Icons.copy),
                        onTap: () {
                          FlutterClipboard.copy(mail.email);
                          print('Copied ${mail.email}!');
                          Scaffold.of(context).showSnackBar(SnackBar(
                            backgroundColor: Colors.grey[600],
                            duration: Duration(milliseconds: 1000),
                            content: Text(
                              '${mail.email} Copied To Clipboard!',
                              style: TextStyle(fontSize: 20.0),
                            ),
                          ));
                          
                          list.add(mail.email);
                          setState(() {
                            list.length.toString();
                          });
                          print(mail.email);
                          print(list);
                        }),
                    trailing: Icon(Icons.delete),
                    onTap: () {
                      DatabaseProvider.db.deleteMail(mail.id).then((_) {
                        BlocProvider.of<MailBloc>(context).add(
                          DeleteMail(index),
                        );
                      });
                      list.remove(mail.email);
                      print(list);
                      setState(() {
                        list.length.toString();
                      });
                    },
                    title: Text(
                      mail.email,
                      style: TextStyle(fontSize: 20.0),
                    ),
                  ),
                );
              },
              separatorBuilder: (BuildContext context, int index) =>
                  Divider(color: Colors.black),
            );
          },
          listener: (BuildContext context, mailList) {},
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Text('Export'),
        onPressed: () =>
            null, //im not sure how to add the mailList to getCsv(???)
      ),
    );
  }
}

getCSV関数でアクティブ化する方法がわからないエクスポートボタンを確認してくださいまた、保存したCSVファイルにアクセスするにはどうすればよいですか(デバイスのどこに保存されますか?)

ゼウス

次の手順を試してください。

  1. クラスに新しいリストを作成します。
  2. からメールリストに割り当てBlocConsumerます。
  3. 次に、リストonPressedgetCsvメソッドに渡して使用します

実装

theEmails 新しいリストです。

class _MailListAdminState extends State<MailListAdmin> {
  List<String> list = [];
  List<Email> finalExport;

  @override
  void initState() {
    super.initState();
    DatabaseProvider.db.getMail().then(
      (mailList) {
        BlocProvider.of<MailBloc>(context).add(SetMail(mailList));
      },
    );
  }
  
  List<Email> theEmails = [];

  getCsv(List<Email> mailList) async {
    List<List<dynamic>> rows = List<List<dynamic>>();
    for (int i = 0; i < mailList.length; i++) {
      List<dynamic> row = List();
      row.add(mailList[i].id);
      row.add(mailList[i].email);
      rows.add(row);
      setState(() {
        mailList = finalExport;
      });
      print(rows);
    }
    await SimplePermissions.requestPermission(Permission.WriteExternalStorage);
    bool checkPermission = await SimplePermissions.checkPermission(
        Permission.WriteExternalStorage);
    if (checkPermission) {
      String dir =
          (await getExternalStorageDirectory()).absolute.path + "/documents";
      String file = "$dir";
      File f = new File(file + "filename.csv");
      String csv = const ListToCsvConverter().convert(rows);
      f.writeAsString(csv);
    }
  }

  //-------------------------------------

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.blueGrey[900],
        title: Text('Newsletter Users'),
        actions: [
          Padding(
              padding: EdgeInsets.only(right: 20.0),
              child: Badge(
                  child: Text('Copied ' + list.length.toString()),
                  showBadge: false)),
        ],
      ),
      body: Container(
        child: BlocConsumer<MailBloc, List<Email>>(
          builder: (context, mailList) {
            theEmails = mailList;
            return ListView.separated(
              itemCount: mailList.length,
              itemBuilder: (BuildContext context, int index) {
                Email mail = mailList[index];
                return Card(
                  child: ListTile(
                    leading: GestureDetector(
                        child: Icon(Icons.copy),
                        onTap: () {
                          FlutterClipboard.copy(mail.email);
                          print('Copied ${mail.email}!');
                          Scaffold.of(context).showSnackBar(SnackBar(
                            backgroundColor: Colors.grey[600],
                            duration: Duration(milliseconds: 1000),
                            content: Text(
                              '${mail.email} Copied To Clipboard!',
                              style: TextStyle(fontSize: 20.0),
                            ),
                          ));

                          list.add(mail.email);
                          setState(() {
                            list.length.toString();
                          });
                          print(mail.email);
                          print(list);
                        }),
                    trailing: Icon(Icons.delete),
                    onTap: () {
                      DatabaseProvider.db.deleteMail(mail.id).then((_) {
                        BlocProvider.of<MailBloc>(context).add(
                          DeleteMail(index),
                        );
                      });
                      list.remove(mail.email);
                      print(list);
                      setState(() {
                        list.length.toString();
                      });
                    },
                    title: Text(
                      mail.email,
                      style: TextStyle(fontSize: 20.0),
                    ),
                  ),
                );
              },
              separatorBuilder: (BuildContext context, int index) =>
                  Divider(color: Colors.black),
            );
          },
          listener: (BuildContext context, mailList) {},
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Text('Export'),
        onPressed: (){
          getCsv(theEmails);
        }, //im not sure how to add the mailList to getCsv(???)
      ),
    );
  }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

角度タイプスクリプトでcsvファイルにデータをエクスポートする

TableViewデータをCSVファイルにエクスポートする

CSVファイルをPostgresにエクスポートするデータ修正

配列のリストとリストをPythonでcsvファイルにエクスポートする

リストのリストをCSVファイルにエクスポートする

ビッグデータをCSVファイルにエクスポートする

エクスポートをCSVファイルにマップ

テーブルデータをtxt(または)csvファイルにエクスポートする方法は?最後のクエリ結果セットのみがファイルにエクスポートされましたか?

ターミナルに表示されるデータをCsvファイルにエクスポートする

ファイルをパブリックファイルシステムにエクスポートする

MySQLテーブルをCSVファイルにエクスポートする

「For」ループをcsvファイルにエクスポートする方法は?

データをファイル.csvにエクスポートするためのパスを追加する方法

データフレームのリストを各csvファイルにエクスポートするにはどうすればよいですか?

1つのGoogleスプレッドシートをCSVファイルにエクスポートする

ターミナルのデータ値をBashのCSVファイルにエクスポートする方法

ライブラリ内のメソッドとパラメータのリストをテキストファイルにエクスポートします

PowerShellでカスタム形式のCSVファイルにデータをエクスポートする

SQLiteデータベースをAndroidのcsvファイルにエクスポートする

csvの各行を個別のtxtファイルにエクスポートする表示キーエラー

WPFデータグリッドをPDFファイルにエクスポートする

混合タイプのオブジェクトを csv ファイルにエクスポートする方法は?

CSVファイルをHTMLフォームにインポートし、HTMLフォームをCSVファイルにエクスポートする方法

PowerShellを使用してChromeブックマークをCSVファイルにエクスポートする

SSRSレポートによってエクスポートされたCSVファイルのヘッダーをカスタマイズする方法

リストをRのCSVまたはTXTファイルにエクスポートする

配列リストをcsvファイルにエクスポートする方法は?

Microsoft SQL Server ManagementStudioを介してデータベースをcsvファイルにエクスポートするクエリを記述します

Pythonを使用してPostgreSQLクエリをcsvファイルにエクスポートする

TOP 一覧

  1. 1

    PictureBoxで画像のブレンドを無効にする

  2. 2

    HTTPヘッダー 'SOAPAction'の値はサーバーによって認識されませんでした

  3. 3

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  4. 4

    レスポンシブウェブサイトの一番下にスティッキーなナビゲーションバーを作成するのに問題がある

  5. 5

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  6. 6

    Ansibleで複数行のシェルスクリプトを実行する方法

  7. 7

    Python / SciPyのピーク検出アルゴリズム

  8. 8

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  9. 9

    ZScalerと証明書の問題により、Dockerを使用できません

  10. 10

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  11. 11

    テキストフィールドの値に基づいて UIslider を移動します

  12. 12

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  13. 13

    「埋め込みブラウザのOAuthログイン」を有効にしてコールバックURLを指定した後でも、Facebookのコールバックエラーが発生する

  14. 14

    tf.nn_conv2dとtf.nn.depthwise_conv2dの違い

  15. 15

    CSSはアニメーションで変換および回転します

  16. 16

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  17. 17

    Chromeウェブアプリのウェブビューの高さの問題

  18. 18

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  19. 19

    amCharts 4で積み上げ棒グラフの輪郭を描く方法は?

  20. 20

    Officeアドインを使用してOutlookの連絡先のリストにプログラムでアクセスすることは可能ですか?

  21. 21

    Reactでclsxを使用する方法

ホットタグ

アーカイブ