주식회사 이웃사촌

내부저장소에 데이타 읽고쓰기 본문

Flutter

내부저장소에 데이타 읽고쓰기

(주)이웃사촌 2021. 8. 10. 15:31

import 'dart:io';

 

import 'package:flutter/material.dart';

import 'package:path_provider/path_provider.dart';

import 'package:shared_preferences/shared_preferences.dart';

 

class FileApp extends StatefulWidget {

  const FileApp({Keykey}) : super(keykey);

 

  @override

  _FileAppState createState() => _FileAppState();

}

 

class _FileAppState extends State<FileApp> {

  int _count = 0;

 

  //과일항목을 담을 리스트를 선언한다.

  List<StringitemList = [];

 

  TextEditingController _controller = TextEditingController();

 

  //########################

  //  sharedPreference 을 체크해서

  //  처음이면 defaultAssetsBundel 을 이용해서

  //  repo/fruit.txt 을 읽어서 내부저장소에 fruit.txt 로 저장하고

  //  리스트에 내용을 담는내용..,

  //########################

  Future<List<String>> loadListFile() async {

    List<StringloadItemList = [];

    var key = 'first';

 

    //1.공유환경설정에서 firstCheck 내용을 확인한다.

    SharedPreferences pref = await SharedPreferences.getInstance();

    bool firstCheck = pref.getBool(keyas bool;

    //var firstCheck = false;

    //2.내부저장소에서 fruit.txt 화일이 있는지 확인한다.

    var dir = await getApplicationDocumentsDirectory();

    bool fileExist = await File(dir.path + '/fruit.txt').exists();

    //3.처음이거나 해당화일이

    //  없으면 ..,

    //  pref 에 key 값을 true 로 설정해 준다.

    //  assets 의 fruit.txt 를 불러와서

    //  내부저장소에 저장하고 리스트를 만들고

    //  있으면 내부저장소에서 데이타를 불어와서 리스트를 만든다.

    if (firstCheck == false || fileExist == false) {

      print('1.############# DefaultAssetBundel');

      //1.공유환경설정

      pref.setBool(keytrue);

 

      //2.assets 의 내용 읽어오기

      // var file =

      //     await DefaultAssetBundle.of(context).loadString('repo/fruit.txt');

 

      var file =

          await DefaultAssetBundle.of(context).loadString('repo/fruit.txt');

 

      //3.내부저장소에 저장해 준다.

      var dir = await getApplicationDocumentsDirectory();

      File(dir.path + '/fruit.txt').writeAsStringSync(file);

      //4.file 내용을 리스트에 담는다.

      var array = file.split('\n');

      for (var item in array) {

        loadItemList.add(item);

      }

 

      return loadItemList;

    } else {

      print('2.############# File(dir.path + fruit.txt).readAsString()');

      //있으면 내부저장소의 내용을 읽어와서 리스트에 담어 던진다.

      var dir = await getApplicationDocumentsDirectory();

      var file = await File(dir.path + '/fruit.txt').readAsString();

 

      var arr = file.split('\n');

 

      for (var item in arr) {

        loadItemList.add(item);

      }

 

      return loadItemList;

    }

  }

 

  @override

  void initState() {

    // ignore: todo

    // TODO: implement initState

    super.initState();

 

    //readCountFile

    readCountFile();

 

    //loadListFile() 을 호출해서 리스트를 반환받아서

    //listItem 에 넣어 화면에 반영한다.

    initData();

  }

 

  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBarAppBar(

        titleText('My File Example'),

      ),

      bodyContainer(

        childCenter(

            childColumn(

          children: [

            TextField(

              controller_controller,

              keyboardTypeTextInputType.text,

            ),

 

            //card 를 가진 ListView.builder

            Expanded(

              childListView.builder(

                  itemCountitemList.length,

                  itemBuilder: (contextindex) {

                    return Card(

                      childCenter(

                        childText(

                          itemList[index],

                          styleTextStyle(fontSize30),

                        ),

                      ),

                    );

                  }),

            )

          ],

        )),

      ),

      floatingActionButtonFloatingActionButton(

        onPressed: () {

          //###############

          //  내부저장소의 내용끝에 추가해서 넣어준다.

          //###############

 

          writeFruit(_controller.value.text);

 

          //#### 리스트에 과일 추가하기

          setState(() {

            itemList.add(_controller.value.text);

          });

 

          // writeFruit(controller.value.text);

          // setState(() {

          //   itemList.add(controller.value.text);

          // });

 

          writeCountFile(_count);

        },

        childIcon(Icons.add),

      ),

    );

  }

 

  //화일에 내용을 쓴다.

  void writeCountFile(int countasync {

    var dir = await getApplicationDocumentsDirectory();

    File(dir.path + '/count.txt').writeAsStringSync(count.toString());

  }

 

  //화일을 읽어온다.

  void readCountFile() async {

    //읽어올 파일을 지정한다.

 

    try {

      var dir = await getApplicationDocumentsDirectory();

 

      var file = await File(dir.path + '/count.txt').readAsString();

 

      print(file);

 

      setState(() {

        _count = int.parse(file);

      });

    } catch (e) {

      print(e.toString());

    }

  }

 

  void initData() async {

    //###

    //  처음이면 assets ==> 내부저장소 ==> list

    //  두번재이면 내부저장소 ==> list

    var result = await loadListFile();

 

    //화면에 반영해야 하므로 setState

    setState(() {

      itemList.addAll(result);

    });

  }

 

  void writeFruit(String textasync {

    var dir = await getApplicationDocumentsDirectory();

    var file = File(dir.path + '/fruit.txt').readAsStringSync();

    file = file + '\n' + text;

 

    File(dir.path + '/fruit.txt').writeAsStringSync(file);

  }

}



반응형
Comments