wip: add easy_localization.

pull/1/head
DebuggerX 4 years ago
parent aa2454553c
commit aa2f50233f

@ -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/conduit.dart';
export 'package:conduit_test/conduit_test.dart';
export 'package:dde_gesture_manager/dde_gesture_manager.dart';
export 'package:test/test.dart';
export 'package:conduit/conduit.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 != '';
}

@ -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),
),
],
),
],
),
),
);
}
}

@ -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": "跟随系统"
}
}
Loading…
Cancel
Save