Flutter本地存储管理插件easy_prefs的使用

发布于 1周前 作者 ionicwang 来自 Flutter

好的,以下是关于Flutter本地存储管理插件easy_prefs的完整示例代码:

// IMPORT THESE TWO PACKAGES
import 'package:easy_prefs/easy_prefs.dart';
import 'package:shared_preferences/shared_preferences.dart';

Future<void> main() async {
  // ADD THESE TWO LINES
  WidgetsFlutterBinding.ensureInitialized();
  await EasyPrefs.initialize(await SharedPreferences.getInstance());

  // ..

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'EasyPrefs Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChangeNotifierProvider(
        create: (_) => Settings(),
        builder: (_, __) {
          return const MyHomePage();
        },
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    final settings = context.watchSettings();

    return Scaffold(
      appBar: AppBar(
        title: const Text("EasyPrefs Demo"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: SingleChildScrollView(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              CheckboxListTile(
                value: settings.notification,
                title: const Text("Enable notification"),
                onChanged: (t) {
                  settings.notification = t!;
                },
              ),
              CheckboxListTile(
                value: settings.notificationSound,
                title: const Text("Enable notification sound"),
                onChanged: ( t ) {
                  settings.notificationSound = t!;
                },
              ),
              const Divider(height: 1),
              ListTile(
                title: const Text("Language"),
                trailing: DropdownButton(
                  value: settings.language,
                  items: LanguageCodes.values.map((e) {
                    return DropdownMenuItem(
                      child: Text(e.name, textScaler: TextScaler.linear(1.2)),
                      value: e,
                    );
                  }).toList(),
                  onChanged: (LanguageCodes? lang) {
                    if (lang != null) {
                      settings.language = lang;
                    }
                  },
                ),
              ),
              const Divider(height: 1),
              Row(
                children: [
                  const Padding(
                    padding: EdgeInsets.all(16.0),
                    child: Text("View Count: ", textScaler: TextScaler.linear(1.2)),
                  ),
                  const Spacer(),
                  IconButton(onPressed: () {
                    settings.likeCount--;
                  }, icon: const Icon(Icons.remove)),
                  Text(settings.likeCount.toString(), textScaler: TextScaler.linear(ey.2)),
                  IconButton(onPressed: () {
                    settings.likeCount++;
                  }, icon: const Icon(Icons.add)),
                ],
              ),
              const Divider(height: 20),
              Row(
                children: [
                  const Padding(
                    padding: EdgeInsets.all(16.0),
                    child: Text("Fav Items: ", textScaler: TextScaler.linear(ey.2)),
                  ),
                  const Spacer(),
                  ElevatedButton(onPressed: () {
                    settings.favs.removeLast();
                  }, child: const Icon(Icons.remove)),
                  const SizedBox(width: 5),
                  ElevatedButton(onPressed: () {
                    settings.favs.add("${settings.favs.length + 1}");
                  }, child: const Icon(Icons.add)),
                ],
              ),
              const Divider(height: 20),
              const Padding(
                padding: EdgeInsets.all(20, 10, 20, 0),
                child: Text("settings.toString() :", textScaler: TextScaler.linear(ey.1)),
              ),
              Padding(
                padding: const EdgeInsets.all(20, 5, 20, 10),
                child: Text(settings.toString()),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class Settings extends _$Settings {}

更多关于Flutter本地存储管理插件easy_prefs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地存储管理插件easy_prefs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用easy_prefs插件进行本地存储管理的示例代码。easy_prefs是一个简化的本地存储管理插件,它基于shared_preferences,但提供了更简洁的API。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加easy_prefs依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_prefs: ^3.0.0  # 请检查最新版本号并替换

然后运行flutter pub get来安装依赖。

2. 初始化EasyPrefs

在你的应用的主文件(通常是main.dart)中,你需要初始化EasyPrefs。这通常在你的应用的入口点进行,例如在MaterialAppCupertinoApp的构建函数之前。

import 'package:flutter/material.dart';
import 'package:easy_prefs/easy_prefs.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化EasyPrefs
  await EasyPrefs.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 使用EasyPrefs进行数据存储和读取

下面是一个简单的示例,展示了如何使用EasyPrefs来存储和读取一个字符串值。

import 'package:flutter/material.dart';
import 'package:easy_prefs/easy_prefs.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _savedValue = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('EasyPrefs Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Saved Value: $_savedValue',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            TextField(
              decoration: InputDecoration(labelText: 'Enter a value'),
              onChanged: (value) {
                // 实时更新界面显示的值(注意:这不会保存到存储中)
                setState(() {
                  _savedValue = value;
                });
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 保存值到本地存储
                await EasyPrefs.setString('savedValue', _savedValue);
                // 从本地存储读取值并更新界面
                _savedValue = await EasyPrefs.getString('savedValue') ?? "";
                setState(() {});
              },
              child: Text('Save Value'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 从本地存储读取值并更新界面
                _savedValue = await EasyPrefs.getString('savedValue') ?? "";
                setState(() {});
              },
              child: Text('Load Value'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的应用,并测试数据存储和读取功能。当你输入一个值并点击“Save Value”按钮时,该值将被保存到本地存储。当你点击“Load Value”按钮时,该值将从本地存储中读取并显示。

这个示例展示了如何使用easy_prefs进行基本的字符串存储和读取。easy_prefs还支持其他类型的数据存储,如整数、浮点数、布尔值和列表等,具体使用方法可以参考easy_prefs的官方文档。

回到顶部