Flutter注解支持插件shared_preferences_annotation的使用

Flutter注解支持插件shared_preferences_annotation的使用

shared_preferences_annotation 是一个用于生成代码的插件,它与 shared_preferences_gen 一起使用,可以简化在 Flutter 应用中使用 SharedPreferences 的过程。以下是详细的使用指南和一个完整的示例。

包信息

使用说明

shared_preferences_annotation 提供了一些注解,这些注解会被 shared_preferences_gen 读取并生成对应的代码。这使得开发者可以在应用中更方便地操作 SharedPreferences

安装依赖

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

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  shared_preferences_annotation: ^0.1.0
  build_runner: ^2.0.0
  shared_preferences_gen: ^0.1.0

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

创建模型类

接下来,创建一个模型类,并使用 @SharedPreferencesSerializable 注解来标记该类。同时,还需要导入生成器包并调用 serializable() 方法。

import 'package:shared_preferences_annotation/shared_preferences_annotation.dart';

part 'example.g.dart'; // 这个文件将由生成器自动生成

class Example {
  @SharedPreferencesKey(name: 'example_key')
  String value;

  Example(this.value);
}

生成代码

在命令行中运行以下命令来生成必要的代码:

flutter pub run build_runner build

这会生成一个名为 example.g.dart 的文件,其中包含了序列化和反序列化的逻辑。

使用示例

现在你可以像下面这样使用 SharedPreferences

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'example.g.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  [@override](/user/override)
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  Example example;

  [@override](/user/override)
  void initState() {
    super.initState();
    example = Example('初始值');
    _loadSharedPreferences();
  }

  Future<void> _loadSharedPreferences() async {
    final prefs = await SharedPreferences.getInstance();
    example = _$ExampleFromJson(prefs.getString('example_key') ?? '');
    setState(() {});
  }

  Future<void> _saveSharedPreferences() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString('example_key', _$ExampleToJson(example));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('SharedPreferences 示例')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('当前值: ${example.value}'),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  example.value = '新值';
                  _saveSharedPreferences();
                });
              },
              child: Text('更新值'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter注解支持插件shared_preferences_annotation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter注解支持插件shared_preferences_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,shared_preferences_annotation 插件并不是官方或广泛认可的插件。通常,我们使用 shared_preferences 插件来在Flutter应用中实现本地持久化存储。虽然 shared_preferences 本身并不直接支持注解功能,但我们可以通过编码实践来管理SharedPreferences的键(keys)。

不过,为了展示如何在Flutter中使用 shared_preferences 插件,我将提供一个简单的代码示例,展示如何读取和写入数据。同时,我也会展示如何通过定义一个常量类来管理SharedPreferences的键,这是一种模拟“注解支持”的方式。

1. 添加 shared_preferences 依赖

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

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.15  # 请检查最新版本号

2. 定义键管理常量类

创建一个常量类来管理SharedPreferences的键,这有助于避免键名拼写错误,并模拟注解的使用:

class SharedPrefsKeys {
  static const String userName = 'user_name';
  static const String userAge = 'user_age';
}

3. 使用 shared_preferences 插件

下面是一个使用 shared_preferences 插件读取和写入数据的示例:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'shared_prefs_keys.dart';  // 导入你定义的键管理常量类

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SharedPreferencesDemo(),
    );
  }
}

class SharedPreferencesDemo extends StatefulWidget {
  @override
  _SharedPreferencesDemoState createState() => _SharedPreferencesDemoState();
}

class _SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
  late SharedPreferences _preferences;

  @override
  void initState() {
    super.initState();
    _initPreferences();
  }

  Future<void> _initPreferences() async {
    _preferences = await SharedPreferences.getInstance();

    // 读取数据
    String? userName = _preferences.getString(SharedPrefsKeys.userName);
    int? userAge = _preferences.getInt(SharedPrefsKeys.userAge);

    print('User Name: $userName');
    print('User Age: $userAge');

    // 写入数据
    await _preferences.setString(SharedPrefsKeys.userName, 'John Doe');
    await _preferences.setInt(SharedPrefsKeys.userAge, 30);

    // 再次读取以验证写入
    userName = _preferences.getString(SharedPrefsKeys.userName);
    userAge = _preferences.getInt(SharedPrefsKeys.userAge);

    print('Updated User Name: $userName');
    print('Updated User Age: $userAge');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SharedPreferences Demo'),
      ),
      body: Center(
        child: Text('Check the console for SharedPreferences output'),
      ),
    );
  }
}

4. 运行应用

运行你的Flutter应用,你应该能在控制台看到SharedPreferences的读取和写入输出。

虽然 shared_preferences 本身不支持注解,但通过上述方法,你可以有效地管理SharedPreferences的键,从而避免硬编码键名带来的问题。如果你确实需要类似注解的功能,可以考虑使用代码生成工具(如 json_serializable)或自定义代码生成脚本来模拟注解行为。

回到顶部