wip: add easy_localization.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import 'package:dde_gesture_manager/model/model.dart';
|
||||
import 'package:dde_gesture_manager/dde_gesture_manager.dart';
|
||||
import 'package:dde_gesture_manager/model/model.dart';
|
||||
|
||||
/// This type initializes an application.
|
||||
///
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:dde_gesture_manager/dde_gesture_manager.dart';
|
||||
import 'package:conduit_test/conduit_test.dart';
|
||||
import 'package:dde_gesture_manager/dde_gesture_manager.dart';
|
||||
|
||||
export 'package:dde_gesture_manager/dde_gesture_manager.dart';
|
||||
export 'package:conduit_test/conduit_test.dart';
|
||||
export 'package:test/test.dart';
|
||||
export 'package:conduit/conduit.dart';
|
||||
export 'package:conduit_test/conduit_test.dart';
|
||||
export 'package:dde_gesture_manager/dde_gesture_manager.dart';
|
||||
export 'package:test/test.dart';
|
||||
|
||||
/// A testing harness for dde_gesture_manager.
|
||||
///
|
||||
|
||||
@@ -45,3 +45,11 @@ class TestProvider extends Test with ChangeNotifier {
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## easy_localization
|
||||
### 生成资源代码
|
||||
`flutter pub run easy_localization:generate && flutter pub run easy_localization:generate -f keys -o locale_keys.g.dart`
|
||||
|
||||
### 已经支持语言
|
||||
- 简体中文(zh-CN)
|
||||
- English(en)
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
library extensions;
|
||||
|
||||
export 'package:dde_gesture_manager/extensions/sout_extension.dart';
|
||||
export 'package:dde_gesture_manager/extensions/string_extension.dart';
|
||||
export 'package:dde_gesture_manager/extensions/context_extension.dart';
|
||||
export 'package:dde_gesture_manager/generated/locale_keys.g.dart';
|
||||
export 'package:easy_localization/easy_localization.dart';
|
||||
|
||||
export 'package:provider/provider.dart';
|
||||
@@ -0,0 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
extension ContextExtension on BuildContext {
|
||||
ThemeData get t => Theme.of(this);
|
||||
|
||||
NavigatorState get n => Navigator.of(this);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
extension StringNotNull on String? {
|
||||
bool get notNull => this != null && this != '';
|
||||
}
|
||||
+18
-89
@@ -1,16 +1,30 @@
|
||||
import 'package:dde_gesture_manager/generated/codegen_loader.g.dart';
|
||||
import 'package:dde_gesture_manager/models/configs.dart';
|
||||
import 'package:dde_gesture_manager/models/configs.provider.dart';
|
||||
import 'package:dde_gesture_manager/models/settings.provider.dart';
|
||||
import 'package:dde_gesture_manager/themes/dark.dart';
|
||||
import 'package:dde_gesture_manager/themes/light.dart';
|
||||
import 'package:dde_gesture_manager/utils/init.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'pages/home.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await initConfigs();
|
||||
runApp(MyApp());
|
||||
runApp(EasyLocalization(
|
||||
supportedLocales: [
|
||||
Locale('zh', 'CN'),
|
||||
Locale('en'),
|
||||
],
|
||||
fallbackLocale: Locale('zh', 'CN'),
|
||||
path: 'resources/langs',
|
||||
assetLoader: CodegenLoader(),
|
||||
child: MyApp(),
|
||||
));
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
@@ -32,10 +46,7 @@ class MyApp extends StatelessWidget {
|
||||
}
|
||||
return MaterialApp(
|
||||
title: 'Flutter Demo',
|
||||
theme: ThemeData(
|
||||
primarySwatch: showDarkMode ? Colors.blue : Colors.blue,
|
||||
brightness: showDarkMode ? Brightness.dark : Brightness.light,
|
||||
),
|
||||
theme: showDarkMode ? darkTheme : lightTheme,
|
||||
home: AnimatedCrossFade(
|
||||
crossFadeState: isDarkMode != null ? CrossFadeState.showSecond : CrossFadeState.showFirst,
|
||||
alignment: Alignment.center,
|
||||
@@ -51,7 +62,7 @@ class MyApp extends StatelessWidget {
|
||||
Future.microtask(() => initEvents(context));
|
||||
return Container();
|
||||
}),
|
||||
secondChild: MyHomePage(title: 'Flutter Demo Home Page'),
|
||||
secondChild: HomePage(),
|
||||
duration: Duration(milliseconds: 500),
|
||||
),
|
||||
);
|
||||
@@ -59,85 +70,3 @@ class MyApp extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MyHomePage extends StatefulWidget {
|
||||
MyHomePage({Key? key, required this.title}) : super(key: key);
|
||||
|
||||
final String title;
|
||||
|
||||
@override
|
||||
_MyHomePageState createState() => _MyHomePageState();
|
||||
}
|
||||
|
||||
class _MyHomePageState extends State<MyHomePage> {
|
||||
int _counter = 0;
|
||||
|
||||
void _incrementCounter() {
|
||||
setState(() {
|
||||
_counter++;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var brightnessMode = context.watch<ConfigsProvider>().brightnessMode;
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(widget.title),
|
||||
),
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'You have pushed the button this many times:',
|
||||
),
|
||||
Text(
|
||||
'$_counter',
|
||||
style: Theme.of(context).textTheme.headline4,
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('System'),
|
||||
leading: Radio<BrightnessMode>(
|
||||
value: BrightnessMode.system,
|
||||
groupValue: brightnessMode,
|
||||
onChanged: (BrightnessMode? value) {
|
||||
context.read<ConfigsProvider>().setProps(brightnessMode: value);
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Light'),
|
||||
leading: Radio<BrightnessMode>(
|
||||
value: BrightnessMode.light,
|
||||
groupValue: brightnessMode,
|
||||
onChanged: (BrightnessMode? value) {
|
||||
setState(() {
|
||||
context.read<ConfigsProvider>().setProps(brightnessMode: value);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Dark'),
|
||||
leading: Radio<BrightnessMode>(
|
||||
value: BrightnessMode.dark,
|
||||
groupValue: brightnessMode,
|
||||
onChanged: (BrightnessMode? value) {
|
||||
setState(() {
|
||||
context.read<ConfigsProvider>().setProps(brightnessMode: value);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: _incrementCounter,
|
||||
tooltip: 'Increment',
|
||||
child: Icon(Icons.add),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import 'package:dde_gesture_manager/widgets/footer.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_HomePageState createState() => _HomePageState();
|
||||
}
|
||||
|
||||
class _HomePageState extends State<HomePage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
Text('asd'),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 32,
|
||||
child: Footer(),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
var darkTheme = ThemeData.dark().copyWith(
|
||||
primaryColor: Colors.grey,
|
||||
);
|
||||
@@ -0,0 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
var lightTheme = ThemeData.light().copyWith(
|
||||
primaryColor: Colors.blue,
|
||||
);
|
||||
@@ -0,0 +1,47 @@
|
||||
import 'package:dde_gesture_manager/models/configs.dart';
|
||||
import 'package:dde_gesture_manager/models/configs.provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:dde_gesture_manager/extensions.dart';
|
||||
|
||||
class Footer extends StatefulWidget {
|
||||
const Footer({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_FooterState createState() => _FooterState();
|
||||
}
|
||||
|
||||
class _FooterState extends State<Footer> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: context.t.backgroundColor,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Container(),
|
||||
PopupMenuButton(
|
||||
initialValue: context.watch<ConfigsProvider>().brightnessMode,
|
||||
child: Icon(Icons.brightness_4_outlined),
|
||||
itemBuilder: (BuildContext context) => [
|
||||
PopupMenuItem<BrightnessMode>(
|
||||
child: Text(LocaleKeys.theme_label).tr(),
|
||||
onTap: () => context.read<ConfigsProvider>().setProps(brightnessMode: BrightnessMode.system),
|
||||
),
|
||||
PopupMenuItem<BrightnessMode>(
|
||||
child: Text(LocaleKeys.theme_light).tr(),
|
||||
onTap: () => context.read<ConfigsProvider>().setProps(brightnessMode: BrightnessMode.light),
|
||||
),
|
||||
PopupMenuItem<BrightnessMode>(
|
||||
child: Text(LocaleKeys.theme_dark).tr(),
|
||||
onTap: () => context.read<ConfigsProvider>().setProps(brightnessMode: BrightnessMode.dark),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -34,6 +34,7 @@ dependencies:
|
||||
path: 3rd_party/window_size
|
||||
xdg_directories_web:
|
||||
path: 3rd_party/xdg_directories_web
|
||||
easy_localization: ^3.0.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
@@ -53,7 +54,8 @@ flutter:
|
||||
uses-material-design: true
|
||||
|
||||
# To add assets to your application, add an assets section, like this:
|
||||
# assets:
|
||||
assets:
|
||||
- resources/langs/
|
||||
# - images/a_dot_burr.jpeg
|
||||
# - images/a_dot_ham.jpeg
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"theme": {
|
||||
"label": "Theme",
|
||||
"dark": "Dark",
|
||||
"light": "Light",
|
||||
"system": "System"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"theme": {
|
||||
"label": "主题",
|
||||
"dark": "深色",
|
||||
"light": "浅色",
|
||||
"system": "跟随系统"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user