일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 호랑이상
- AR Lipstick Viewer
- 안드로이드
- 거북이상
- 인공지능 동물상 관상 테스트
- 관상 이야기
- ==>
- 연애운
- #자바
- 나른한오후
- 관상이야기
- 늑대상
- 코틀린
- 테스트
- 인공지능 거북이 관상
- 재물운
- 나른한 오후
- 관상 테스트
- Lipstick
- 동물상
- Teachable Machine
- 자바
- 코로나
- 쥐상관상
- 인공지능
- 실시간 인공지능 관상 테스트
- 관상
- 인공지능 관상
- 프로그램
- 인공지능 호랑이상
- Today
- Total
주식회사 이웃사촌
내부저장소에 데이타 읽고쓰기 본문
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({Key? key}) : super(key: key);
@override
_FileAppState createState() => _FileAppState();
}
class _FileAppState extends State<FileApp> {
int _count = 0;
//과일항목을 담을 리스트를 선언한다.
List<String> itemList = [];
TextEditingController _controller = TextEditingController();
//########################
// sharedPreference 을 체크해서
// 처음이면 defaultAssetsBundel 을 이용해서
// repo/fruit.txt 을 읽어서 내부저장소에 fruit.txt 로 저장하고
// 리스트에 내용을 담는내용..,
//########################
Future<List<String>> loadListFile() async {
List<String> loadItemList = [];
var key = 'first';
//1.공유환경설정에서 firstCheck 내용을 확인한다.
SharedPreferences pref = await SharedPreferences.getInstance();
bool firstCheck = pref.getBool(key) as 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(key, true);
//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(
appBar: AppBar(
title: Text('My File Example'),
),
body: Container(
child: Center(
child: Column(
children: [
TextField(
controller: _controller,
keyboardType: TextInputType.text,
),
//card 를 가진 ListView.builder
Expanded(
child: ListView.builder(
itemCount: itemList.length,
itemBuilder: (context, index) {
return Card(
child: Center(
child: Text(
itemList[index],
style: TextStyle(fontSize: 30),
),
),
);
}),
)
],
)),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
//###############
// 내부저장소의 내용끝에 추가해서 넣어준다.
//###############
writeFruit(_controller.value.text);
//#### 리스트에 과일 추가하기
setState(() {
itemList.add(_controller.value.text);
});
// writeFruit(controller.value.text);
// setState(() {
// itemList.add(controller.value.text);
// });
writeCountFile(_count);
},
child: Icon(Icons.add),
),
);
}
//화일에 내용을 쓴다.
void writeCountFile(int count) async {
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 text) async {
var dir = await getApplicationDocumentsDirectory();
var file = File(dir.path + '/fruit.txt').readAsStringSync();
file = file + '\n' + text;
File(dir.path + '/fruit.txt').writeAsStringSync(file);
}
}
'Flutter' 카테고리의 다른 글
AnimatedBuilder 사용하기 (0) | 2021.08.13 |
---|---|
List.generate List<Map<String, dynamic>>==> <List<Todo>> (0) | 2021.08.11 |
path_provider + File 을 이용한 화일 읽고/쓰기 (0) | 2021.08.10 |
ListView.builder 스크롤로 책정보 가져오기 (0) | 2021.08.10 |
이미지파일 다운로드및 FutureBuilder 를 이용한 화면에 나타내기 소스 (0) | 2021.08.09 |