flutter 数据库floor存储和轻量级存储SharedPr
2020-12-15 本文已影响0人
优优切克闹



附上key封装代码:
/// ----------------文件名 sp_keys.dart -------------
class SPKeys {
/// ---------------- fxchat_news 快讯设置 ----------------
///只看重要
String get flashSettingJustLookImportant => "flashSettingJustLookImportant";
///弹框推送
String get flashSettingFramePush => "flashSettingFramePush";
}
附上SharedPreferences封装代码:
/// ----------------文件名 sp_utils.dart -------------
import 'package:shared_preferences/shared_preferences.dart';
///SharedPreferences
class SpUtils {
///存储String类型值到本地
static setString(String key, String value) async {
SharedPreferences sp = await SharedPreferences.getInstance();
sp.setString(key, value);
}
///存储Int类型值到本地
static setInt(String key, int value) async {
SharedPreferences sp = await SharedPreferences.getInstance();
sp.setInt(key, value);
}
///存储Bool类型值到本地
static setBool(String key, bool value) async {
SharedPreferences sp = await SharedPreferences.getInstance();
sp.setBool(key, value);
}
///从Sp里获取值
static get(String key) async {
SharedPreferences sp = await SharedPreferences.getInstance();
return sp.get(key);
}
///从Sp里获取String值
static getString(String key) async {
SharedPreferences sp = await SharedPreferences.getInstance();
return sp.getString(key);
}
///从Sp里获bool值
static getBool(String key) async {
SharedPreferences sp = await SharedPreferences.getInstance();
return sp.getBool(key);
}
}
附上使用代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:libcommon/base/mvp_abstract/abstract_view.dart';
import 'package:fxchat_news/flash/flash_settings/interfaces/flash_settings_mvp.dart';
import 'package:fxchat_news/flash/flash_settings/presenter/imp_flash_settings_presenter.dart';
import 'package:libcommon/base/stl_base_page.dart';
import 'package:libcommon/generated/codegen_r_loader.g.dart';
import 'package:libcommon/export/vlibcommon.dart';
import 'package:stl_easy_localization/stl_easy_localization.dart';
import 'package:libcommon/widgets/fx_appbar.dart';
import 'package:libcommon/local/sp/sp_keys.dart';
import '../../../router_fxchat_news.dart';
class FlashSettingsPage extends AbstractView {
@override
StlStatefulPageBaseState<StlStatefulPageBase> getState() {
return _FlashSettingsPage();
}
}
class _FlashSettingsPage
extends AbstractViewState<FlashSettingsMvpPresenter, FlashSettingsPage>
implements FlashSettingsMvpView {
List<String> titleList = List();
/*只看重要*/
bool _justLookImport = false;
/*弹框推送*/
bool _fromPush = false;
@override
void initState() {
super.initState();
titleList = [
R.fxchat_news_just_look_important.tr(),
R.fxchat_news_frame_push.tr(),
R.fxchat_news_flash_tag.tr(),
];
/*获取本地开关状态*/
_getStatus();
}
_getStatus() async {
_justLookImport = await getJustLookImportStatus();
_fromPush = await getFromPushStatus();
setState(() {});
}
@override
ImpFlashSettingsPresenter createPresenter() {
return ImpFlashSettingsPresenter();
}
@override
Widget buildPage(BuildContext context) {
return Scaffold(
appBar: FXAppbar.buildCommon(
title: R.fxchat_news_flash_settings_title.tr(),
),
body: _buildBody(),
);
}
Widget _buildBody() {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
flex: 1,
child: ListView.builder(
itemCount: titleList.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: index == 2 ? _onTapAction : null,
child: Column(
children: [
Container(
height: 57.hDp,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 1,
child: Padding(
padding: EdgeInsets.only(left: 20.0.wDp),
child: Text(
titleList[index],
style: FXTextStyles.F4_34.B2.C1.build(),
),
),
),
Padding(
padding: EdgeInsets.only(right: 20.0.wDp),
child: index < 2
? CupertinoSwitch(
value: index == 0
? _justLookImport
: _fromPush,
activeColor: FXColors.Theme_C0,
onChanged: (flag) {
_changedNoSeeMe(flag, index);
})
: SvgPicture.asset(
"fxchat_news_ic_next_black.svg".fxNewsSvg,
width: 18,
height: 18,
),
)
],
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 20.0.wDp),
child: Divider(
height: 1.hDp, color: FXColors.Gray_Divider),
)
],
),
);
}),
)
],
);
}
void _onTapAction() {
STLRouter.of()
.navigator
.pushNamed(RouterFxChatNews.ROUTER_INNER_NEWS_FLASH_FLASH_TAG_PAGE);
}
Future<bool> getJustLookImportStatus() async {
return await SpUtils.getBool(SPKeys().flashSettingJustLookImportant) ??
true;
}
Future<bool> getFromPushStatus() async {
return await SpUtils.getBool(SPKeys().flashSettingFramePush) ?? false;
}
/*用户点击开关后设置状态到数据库*/
Future<void> _changedNoSeeMe(bool isCheck, int index) async {
if (index == 0) {
setState(() {
_justLookImport = isCheck;
});
await SpUtils.setBool(SPKeys().flashSettingJustLookImportant, isCheck);
} else {
setState(() {
_fromPush = isCheck;
});
await SpUtils.setBool(SPKeys().flashSettingFramePush, isCheck);
}
}
}