flutter 数据库floor存储和轻量级存储SharedPr

2020-12-15  本文已影响0人  优优切克闹

数据库存储:推荐用 floor
参考链接1 参考链接2
轻量级本地存储:推荐用:SharedPreferences

效果图 SharedPreferences简单封装
存取需要的key

附上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);
    }
  }
}

上一篇 下一篇

猜你喜欢

热点阅读