Material 模板
pubspec.yaml
把字体复制到fonts目录下,字体从这里下载
yaml
flutter:
uses-material-design: true
assets:
- assets/
fonts:
- family: "PuHui"
fonts:
- asset: fonts/AlibabaPuHuiTi-3-Regular.ttfmain.dart
dart
class MainTranslations extends Translations {
@override
Map<String, Map<String, String>> get keys => {
'en_US': enUS,
'zh_CN': zhCN,
'zh_TW': zhTW,
};
}
class MainApp extends StatefulWidget {
const MainApp({super.key});
@override
State<MainApp> createState() => _MainAppState();
}
class _MainAppState extends State<MainApp> {
final Controller controller=Get.find();
@override
Widget build(BuildContext context) {
final Brightness brightness = MediaQuery.of(context).platformBrightness;
controller.darkModeHandler(brightness == Brightness.dark);
return Obx(()=>
GetMaterialApp(
translations: MainTranslations(),
debugShowCheckedModeBanner: false,
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate
],
locale: controller.lang.value.locale,
supportedLocales: supportedLocales.map((item)=>item.locale).toList(),
theme: ThemeData(
brightness: controller.darkMode.value ? Brightness.dark : Brightness.light,
fontFamily: 'PuHui',
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.orange,
brightness: controller.darkMode.value ? Brightness.dark : Brightness.light,
),
textTheme: controller.darkMode.value ? ThemeData.dark().textTheme.apply(
fontFamily: 'PuHui',
bodyColor: Colors.white,
displayColor: Colors.white,
) : ThemeData.light().textTheme.apply(
fontFamily: 'PuHui',
),
),
home: MainWindow()
),
);
}
}controller.dart
dart
class LanguageType{
String name;
Locale locale;
LanguageType(this.name, this.locale);
}
List<LanguageType> get supportedLocales => [
LanguageType("English", const Locale("en", "US")),
LanguageType("简体中文", const Locale("zh", "CN")),
LanguageType("繁體中文", const Locale("zh", "TW")),
];
class Controller extends GetxController {
RxBool autoDark=true.obs;
RxBool darkMode=false.obs;
Rx<LanguageType> lang=Rx(supportedLocales[0]);
late SharedPreferences prefs;
Future<void> initLang() async {
prefs=await SharedPreferences.getInstance();
int? langIndex=prefs.getInt("langIndex");
if(langIndex==null){
final deviceLocale=PlatformDispatcher.instance.locale;
final local=Locale(deviceLocale.languageCode, deviceLocale.countryCode);
int index=supportedLocales.indexWhere((element) => element.locale==local);
if(index!=-1){
lang.value=supportedLocales[index];
lang.refresh();
}
}else{
lang.value=supportedLocales[langIndex];
}
}
void changeLanguage(int index){
lang.value=supportedLocales[index];
prefs.setInt("langIndex", index);
lang.refresh();
Get.updateLocale(lang.value.locale);
}
void darkModeHandler(bool dark){
if(autoDark.value){
darkMode.value=dark;
}
}
}