Flutter简单设置管理插件simple_setting的使用

Flutter简单设置管理插件simple_setting的使用

simple_setting 是一个用于简化 Flutter 应用程序国际化(i18n)的包。

pub package

使用方法

要使用此插件,需要在 pubspec.yaml 文件中添加 simple_setting 作为依赖项。

dependencies:
  simple_setting: ^最新版本号

步骤0

导入包:

import 'package:simple_setting/simple_setting.dart';

步骤1

定义一个类来存储语言映射,例如:

class Lang {
  static const Map<String, String> vi = {
    "title": "Ví dụ",
  };

  static const Map<String, String> en = {
    "title": "Example",
  };
}

如果你使用 JSON 文件,可以跳过这一步。

步骤2

初始化语言信息,并将第一个小部件包装在 SettingProvider 中:

void main() {
  SimpleSetting.init(languageData: Lang.vi);
  runApp(const MyApp());
}

// 如果使用 JSON 文件
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SimpleSetting.init(languageData: await "path to asset json file".js());
  runApp(const MyApp());
}

步骤3

通过 SettingWidget 捕获语言设置更改,并使用字符串扩展 obs 来使用语言:

SettingWidget(builder: (_, __, ___) {
  return MyHomePage(title: "title".obs());
}

// 或者使用 Text 小部件的扩展
Text("title").obs()

步骤4

当你想要更改语言时,使用以下语句:

SimpleSetting.changeLanguage(Lang.en);

// 对于 JSON 文件
SimpleSetting.changeLanguage(await "path to asset json file".js());

注意事项

  • 如果你需要根据系统语言自动更改语言,可以在 init 函数中传递 langMap 参数,例如:
SimpleSetting.init(langMap: {
    "en_US": Lang.en,
    "vi_VN": Lang.vi
});
  • 如果你需要格式化带参数的字符串,可以将参数传递给 obs 扩展:
class Lang {
  static const Map<String, String> vi = {
    "title": "Ví dụ :id",
  };

  static const Map<String, String> en = {
    "title": "Example :id",
  };
}

// 使用
Text("title".obs(params: {"id": 1}));

// 或者
Text("title").obs(params: {"id": 1});

完整示例

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

void main() {
  SimpleSetting.init(languageData: Lang.vi);
  runApp(const MyApp());
}

class Lang {
  static const Map<String, String> vi = {
    "title": "Ví dụ",
  };

  static const Map<String, String> en = {
    "title": "Example",
  };
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "title",
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: "title"),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title).obs(),
      ),
      body: Container(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 检查当前语言
          bool isVi = SettingData.lang == Lang.vi;
          SimpleSetting.changeLanguage(isVi ? Lang.en : Lang.vi);
        },
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter简单设置管理插件simple_setting的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter简单设置管理插件simple_setting的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


simple_setting 是一个用于 Flutter 的简单设置管理插件,它允许你在应用中轻松地管理和存储用户的设置。这个插件非常适合那些需要存储少量简单数据的应用,比如用户偏好设置、主题设置等。

安装 simple_setting

首先,你需要在 pubspec.yaml 文件中添加 simple_setting 依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_setting: ^1.0.0  # 请检查最新版本

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

使用 simple_setting

1. 导入包

在你的 Dart 文件中导入 simple_setting 包:

import 'package:simple_setting/simple_setting.dart';

2. 初始化设置

在使用 simple_setting 之前,你需要初始化它。通常你可以选择在 main 函数中进行初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await SimpleSetting.init();
  runApp(MyApp());
}

3. 保存设置

你可以使用 SimpleSetting.set 方法来保存设置。这个方法接受一个键和一个值,值可以是 String, int, double, bool, 或 List<String>

await SimpleSetting.set('theme', 'dark');
await SimpleSetting.set('fontSize', 14);
await SimpleSetting.set('isNotificationsEnabled', true);

4. 读取设置

你可以使用 SimpleSetting.get 方法来读取设置。这个方法接受一个键和一个默认值(可选),如果键不存在,则返回默认值。

String theme = await SimpleSetting.get('theme', 'light');
int fontSize = await SimpleSetting.get('fontSize', 12);
bool isNotificationsEnabled = await SimpleSetting.get('isNotificationsEnabled', false);

5. 删除设置

你可以使用 SimpleSetting.remove 方法来删除某个设置:

await SimpleSetting.remove('theme');

6. 清除所有设置

你可以使用 SimpleSetting.clear 方法来清除所有设置:

await SimpleSetting.clear();

示例代码

以下是一个简单的示例,展示了如何使用 simple_setting 来保存和读取用户的主题设置:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await SimpleSetting.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      themeMode: _getThemeMode(),
      home: MyHomePage(),
    );
  }

  ThemeMode _getThemeMode() async {
    String theme = await SimpleSetting.get('theme', 'light');
    return theme == 'dark' ? ThemeMode.dark : ThemeMode.light;
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Simple Setting Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                await SimpleSetting.set('theme', 'dark');
                print('Theme set to dark');
              },
              child: Text('Set Dark Theme'),
            ),
            ElevatedButton(
              onPressed: () async {
                await SimpleSetting.set('theme', 'light');
                print('Theme set to light');
              },
              child: Text('Set Light Theme'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部