팝업을 띄어서 '오늘 하루 보지 않기' 를 누르면 오늘 하루를 저장해 팝업을 띄우지 않게 하는 방법을 구현 해보려고 한다.
우선 flutter 의 대표적인 SharedPreferences 를 사용 할 것이다.
기능
SharedPreferences는 기기 내부 디스크에 내용을 저장하는 것으로 어플을 껐다 다시 켰을 때 이전에 사용한 내용들을 저장해놓고 불러오기 위하여 사용된다.
사용법
pubspec.yaml
shared_preferences: ^2.0.8
SharedPreferences를 만들기
선언
final SharedPreferences pref = await SharedPreferences.getInstance();
데이터 저장
.set(맞는 type).('이름', 값);
ex) pref.setInt('number', 123);
기기 내부에 123이 'number'라는 이름으로 저장된다.
데이터 가져오기
.get(맞는 type).('이름');
ex) pref.getInt('number');
기기 내부에 number라는 이름 안에 있는 데이터를 가져온다.
전체 예시 코드
import 'package:flutter/material.dart';
import 'package:sm_mdi/constants/CommonColor.dart';
import '../StoreUtils/StoreUtils.dart';
class MainDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SizedBox(
width : 450,
height: 450,
child : Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Image.asset(
"assets/images/pop.png",
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
style: ElevatedButton.styleFrom(
backgroundColor: CommonColor.bannerDark_GREY,
padding: EdgeInsets.fromLTRB(30, 20, 30, 20),
),
child: Text('M-able 와이드 둘러보기',
style: TextStyle(color: CommonColor.white))),
const SizedBox(width: 20),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
style: ElevatedButton.styleFrom(
backgroundColor: CommonColor.fontYellow,
padding: EdgeInsets.fromLTRB(30, 20, 30, 20),
),
child: Text(
'이벤트 자세히 보기',
style: TextStyle(color: CommonColor.bannerBgDown_DK),
),
),
],
),
const SizedBox(height: 30),
TextButton(
style:
TextButton.styleFrom(foregroundColor: CommonColor.fontGrey),
child: const Text('오늘 하루 그만 보기',
style: TextStyle(
decoration: TextDecoration.underline,
)),
onPressed: () {
StoreUtils.instance.hidePage();
Navigator.of(context).pop();
},
),
],
));
}
}
TextButton의 onPressed: () { StoreUtils.instance.hidePage(); } 이 구절을 통해 아래의 StoreUtils이 시작 된다. 이때 현재 시간과 그 시간이 24시간이 지났는지 아닌지를 판단하고 그렇다면 팝업을 띄우고 아니라면 해당 시간을 저장 해 놓는 방법으로 진행 된다.
import 'package:shared_preferences/shared_preferences.dart';
class StoreUtils {
static final StoreUtils _instance = StoreUtils();
static StoreUtils get instance => _instance;
SharedPreferences? _box;
Future<void> init() async {
_box = await SharedPreferences.getInstance();
}
Future<void> hidePage() async {
if (_box == null) {
await init();
}
DateTime now = DateTime.now();
_box!.setInt('lastHideTime', now.millisecondsSinceEpoch);
}
Future<bool> checkShowPage() async {
if (_box == null) {
await init();
}
int? lastHideTime = _box!.getInt('lastHideTime');
if (lastHideTime != null) {
DateTime lastTime = DateTime.fromMillisecondsSinceEpoch(lastHideTime);
DateTime now = DateTime.now();
return now.difference(lastTime).inMinutes >= 60;
} else {
return true;
}
}
}
'Flutter' 카테고리의 다른 글
Flutter 최초 첫 빌드(실행)시에만 작동하게 하기 WidgetsFlutterBinding.ensureInitialized(); (0) | 2023.12.15 |
---|---|
Flutter 라이트모드/다크모드 설정 (0) | 2023.12.10 |
Flutter edit configuration 안드로이드스튜디오/플러터 실행 (0) | 2023.12.01 |
Flutter 공통위젯으로 사용 할 콤보박스(comboBox) 위젯 만들기 (0) | 2023.11.30 |
Flutter toggleButtons 만들기 (2) | 2023.11.26 |