增加多语言支持

This commit is contained in:
胡天 2023-07-23 20:35:46 +08:00
parent a7d4f1d256
commit e650433e4c
8 changed files with 98 additions and 3 deletions

View File

@ -15,7 +15,8 @@ class ConfigService extends GetxService {
bool get isRelease => bool.fromEnvironment("dart.vm.product");
Locale locale = Locale("en", "US");
// Locale locale = Locale("en", "US");
Locale locale = Locale("zh", "CN");
List<Locale> languages = [
Locale('en', 'US'),

View File

@ -1,3 +1,4 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -6,7 +7,9 @@ import 'package:news_getx/data/services/config.dart';
import 'package:news_getx/global.dart';
import 'package:news_getx/routes/app_pages.dart';
import 'package:news_getx/theme/app_theme.dart';
import 'package:news_getx/translations/app_translations.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
Future<void> main() async {
await Global.init();
@ -24,12 +27,24 @@ class MyApp extends StatelessWidget {
// true column就不会随着软键盘而变化
// useInheritedMediaQuery: true,
builder: (BuildContext context, Widget? child) {
var app = GetMaterialApp(
title: 'News',
debugShowCheckedModeBanner: false,
theme: AppTheme.light,
initialRoute: AppRoutes.Initial,
initialRoute: AppPages.Initial,
getPages: AppPages.pages,
navigatorObservers: [AppPages.observer],
translations: AppTranslations(),
//
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: ConfigService.to.languages,
locale: ConfigService.to.locale,
fallbackLocale: Locale('en', 'US'),
builder: EasyLoading.init(),
);

View File

@ -19,7 +19,6 @@ class MainController extends GetxController {
///
//
asyncLoadAllData() async {
print('开始拉取数据');
state.categories = await newsRepository.categories(cacheDisk: true);
state.channels = await newsRepository.channels(cacheDisk: true);
//

View File

@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
import 'package:news_getx/routes/app_pages.dart';
///
class AppNavigatorObserver extends NavigatorObserver {
@override
void didPush(Route route, Route? previousRoute) {
super.didPush(route, previousRoute);
var name = route.settings.name ?? "";
if (name.isNotEmpty) {
AppPages.history.add(name);
}
}
@override
void didPop(Route route, Route? previousRoute) {
super.didPop(route, previousRoute);
AppPages.history.remove(route.settings.name);
}
@override
void didRemove(Route route, Route? previousRoute) {
super.didRemove(route, previousRoute);
AppPages.history.remove(route.settings.name);
}
@override
void didReplace({Route? newRoute, Route? oldRoute}) {
super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
if (newRoute != null) {
var index = AppPages.history.indexWhere((element) {
return element == oldRoute?.settings.name;
});
var name = newRoute.settings.name ?? '';
if (name.isNotEmpty) {
if (index > 0) {
AppPages.history[index] = name;
} else {
AppPages.history.add(name);
}
}
}
}
}

View File

@ -1,3 +1,4 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:news_getx/middlewares/router_auth.dart';
import 'package:news_getx/middlewares/router_welcome.dart';
@ -14,10 +15,16 @@ import 'package:news_getx/modules/sign_up/sign_up_binding.dart';
import 'package:news_getx/modules/sign_up/sign_up_page.dart';
import 'package:news_getx/modules/welcome/welcome_binding.dart';
import 'package:news_getx/modules/welcome/welcome_page.dart';
import 'package:news_getx/routes/app_observer.dart';
part './app_routes.dart';
abstract class AppPages {
static const Initial = AppRoutes.Initial;
static final NavigatorObserver observer = AppNavigatorObserver();
static List<String> history = [];
static final pages = [
//
GetPage(

View File

@ -0,0 +1,12 @@
import 'package:get/get.dart';
import 'en_US.dart';
import 'zh_CN.dart';
class AppTranslations extends Translations {
@override
Map<String, Map<String, String>> get keys => {
'en_US': enUS,
'zh_CN': zhCN,
};
}

View File

@ -0,0 +1,5 @@
const Map<String, String> enUS = {
'title': 'This is Title!',
'login': 'logged in as @name with email @email',
'welcome': 'welcome',
};

View File

@ -0,0 +1,5 @@
const Map<String, String> zhCN = {
'title': '这是标题',
'login': '登录用户 @name邮箱账号 @email',
'Welcome': '欢迎',
};