Flutter本地应用数据管理插件app_local的使用
Flutter本地应用数据管理插件app_local的使用
简介
app_local
是一个轻量级且功能强大的 Flutter 包,它允许您轻松实现应用程序本地化,动态语言切换,持久设置,并支持本地设备语言 - 所有这些只需少量配置即可完成。
特性
- 🚀 简单的应用程序本地化
- 🔄 动态区域切换
- 💾 自动区域持久化
- 📱 支持手机默认语言
- 🔌 通过
LocaleText
小部件简单集成 - ⚡ 最小化的配置需求
示例
开始使用
1. 设置资源文件
- 在项目根目录下创建一个
assets/lang
文件夹。 - 添加您的区域 JSON 文件(例如
en.json
,ar.json
)。
示例区域文件:
// en.json
{
"welcome": "Welcome to the App",
"change_lang": "Change the language"
}
// ar.json
{
"welcome": "مرحبا بك في التطبيق",
"change_lang": "تغيير لغة التطبيق"
}
2. 添加依赖
在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
flutter:
sdk: flutter
app_local: ^latest_version
# 添加资源路径
flutter:
uses-material-design: true
assets:
- assets/lang/
3. 初始化
在 main.dart
中添加以下代码:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Locales.init(
localeNames: ['en', 'ar'], // 您支持的语言区域
localPath: "assets/lang/", // 您的区域文件路径
phoneLocale: true, // 使用手机的默认区域
);
runApp(MyApp());
}
将 MaterialApp
包裹在 LocaleBuilder
中:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return LocaleBuilder(
builder: (locale) => MaterialApp(
title: 'App Local',
localizationsDelegates: Locales.delegates,
supportedLocales: Locales.supportedLocales,
locale: locale,
home: HomeScreen(),
),
);
}
}
使用
显示翻译文本
使用小部件:
LocaleText('welcome');
使用字符串:
// 使用静态方法
Locales.string(context, 'welcome');
// 使用扩展方法
context.localeString('welcome');
更改区域
使用静态方法:
Locales.change(context, 'ar');
// 使用扩展方法
context.changeLocale('ar');
// 切换到设备区域
Locales.change(context, 'auto');
获取当前区域
使用静态方法:
Locales.currentLocale(context);
// 使用扩展方法
context.currentLocale;
iOS
如果您想支持设备默认语言,请在 Info.plist
文件中添加以下内容:
<key>CFBundleLocalizations</key>
<array>
<!-- 添加您支持的语言区域 -->
<string>en</string>
<string>ar</string>
</array>
平台支持
平台 | 支持 |
---|---|
Android | ✅ |
iOS | ✅ |
macOS | ✅ |
Web | ✅ |
Windows | ✅ |
Linux | ✅ |
默认本地语言
平台 | 支持 |
---|---|
Android | ✅ |
iOS | ✅ |
macOS | ✅ |
Web | ❌ |
Windows | ❌ |
Linux | ❌ |
即将支持 Web, Windows 和 Linux。
完整示例
import 'package:flutter/material.dart';
import 'package:app_local/app_local.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Locales.init(
localeNames: ['en', 'ar'],
localPath: "assets/a/",
phoneLocale: true); // 获取上次保存的语言
// 移除 await async (以获取系统语言作为默认语言)
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return LocaleBuilder(
builder: (locale) => MaterialApp(
title: 'Flutter Locales',
localizationsDelegates: Locales.delegates,
supportedLocales: Locales.supportedLocales,
locale: locale,
theme: ThemeData(primarySwatch: Colors.blue),
home: HomeScreen(),
),
);
}
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: LocaleText('localization')),
body: Center(
child: LocaleText('welcome', style: TextStyle(fontSize: 32)),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (_) => SettingScreen()));
},
child: Icon(Icons.settings),
),
);
}
}
class SettingScreen extends StatelessWidget {
const SettingScreen({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(Locales.string(context, 'setting'))),
// 使用扩展方法
// appBar: AppBar(title: Text(context.localeString('setting'))),
body: Column(
children: [
ListTile(
onTap: () => Locales.change(context, 'en'),
title: LocaleText('english'),
),
ListTile(
onTap: () => Locales.change(context, 'ar'),
title: LocaleText('arabic'),
),
// 使用扩展方法更改语言
ListTile(
onTap: () => context.changeLocale('auto'),
title: LocaleText('auto'),
),
Text('Current Locale: ' +
Locales.currentLocale(context)!.languageCode),
// 使用扩展方法
// Text('Current Locale: ' + context.currentLocale.languageCode),
],
),
);
}
}
更多关于Flutter本地应用数据管理插件app_local的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地应用数据管理插件app_local的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 app_local
插件在 Flutter 应用中进行本地数据管理的代码示例。app_local
插件虽然不是一个广为人知的官方或流行插件,但基于假设它提供类似 shared_preferences
或 sqflite
的功能,我们可以编写一个通用的代码示例来展示如何使用本地存储。
为了演示,我将假设 app_local
插件提供了基本的键值对存储功能。如果 app_local
的实际 API 有所不同,请根据具体文档进行调整。
首先,确保在 pubspec.yaml
文件中添加 app_local
依赖(注意:这里的 app_local
是假设的,实际使用时请替换为真实插件名):
dependencies:
flutter:
sdk: flutter
app_local: ^x.y.z # 替换为实际版本号
然后,运行 flutter pub get
来获取依赖。
接下来,编写代码来使用这个插件:
import 'package:flutter/material.dart';
import 'package:app_local/app_local.dart'; // 假设这是插件的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Local Storage Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LocalStorageDemo(),
);
}
}
class LocalStorageDemo extends StatefulWidget {
@override
_LocalStorageDemoState createState() => _LocalStorageDemoState();
}
class _LocalStorageDemoState extends State<LocalStorageDemo> {
final AppLocal _storage = AppLocal();
String _savedValue = '';
@override
void initState() {
super.initState();
// 从本地存储中读取数据
_readValueFromStorage();
}
Future<void> _readValueFromStorage() async {
String? value = await _storage.getString('saved_key');
setState(() {
_savedValue = value ?? '';
});
}
Future<void> _saveValueToStorage(String value) async {
await _storage.setString('saved_key', value);
setState(() {
_savedValue = value;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Local Storage Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Enter a value'),
onChanged: (value) {
// 当文本改变时,可以即时保存(这里为了演示简单处理)
_saveValueToStorage(value);
},
),
SizedBox(height: 16),
Text(
'Saved Value:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
Text(
_savedValue,
style: TextStyle(fontSize: 16),
),
],
),
),
);
}
}
在这个示例中,我们假设 AppLocal
类提供了 getString
和 setString
方法来读取和写入字符串数据。以下是几个关键点:
- 初始化存储:在
initState
方法中,我们从本地存储中读取初始值。 - 保存数据:在文本字段的值改变时,我们调用
_saveValueToStorage
方法将数据保存到本地存储。 - 读取数据:我们从本地存储中读取数据并显示在界面上。
请注意,这个示例代码是基于假设的 app_local
插件的 API。如果实际使用的插件 API 不同,请根据插件的官方文档进行相应的调整。如果 app_local
实际上是一个不存在的插件,你可能需要使用如 shared_preferences
或 sqflite
等流行的本地存储解决方案。