Flutter多功能集成插件mahg_essential_package的使用
mahg_essential_package #
安装 #
在你的 pubspec.yaml
文件中添加以下依赖项:
dependencies:
mahg_essential_package: <最新版本>
然后运行 flutter pub get
来安装该包。
使用示例
以下是一个完整的示例,展示了如何使用 mahg_essential_package
包来实现国际化、路由管理、加载动画等功能。
示例代码
main.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:mahg_essential_package/mahg_essential_package.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await ConfigService.init();
// 设置本地化数据
AppLocalizations.data = {
'Login': '登录',
'Location': '位置',
'Phone Number': '电话号码'
};
// 设置API基础URL
ConfigService.apiURL = 'https://jsonplaceholder.typicode.com/';
// 定义路由规则
BeamerService.routesEx = {
'/': (context, state, data) {
return BeamerService.beamPageEx(
key: ValueKey('home'),
title: '首页',
child: MyHomePage(
title: '测试',
),
);
},
'/person': (context, state, data) {
return BeamerService.beamPageEx(
key: ValueKey('person'),
title: '用户页面',
child: PersonPage(),
);
},
};
runApp(RestartWidget(MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp.router(
title: 'Flutter Demo',
supportedLocales: [
Locale('zh', 'CN'), // 支持中文
Locale('en', 'US'), // 支持英文
],
locale: Locale('zh', 'CN'), // 默认语言为中文
localeResolutionCallback: (locale, supportedLocales) {
var lang = ConfigService.getValueString('language');
if (lang.isEmpty) {
for (var supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale?.languageCode) {
ConfigService.setValueString(
'language', supportedLocale.languageCode);
lang = supportedLocale.languageCode;
print('当前语言设置为: $lang');
return supportedLocale;
}
}
} else {
print('已保存的语言: $lang');
var local = supportedLocales
.where((element) => element.languageCode == lang)
.first;
return local;
}
return null;
},
localizationsDelegates: const [
GlobalCupertinoLocalizations.delegate,
DefaultCupertinoLocalizations.delegate,
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
theme: ThemeData(
primarySwatch: Colors.blue,
),
routerDelegate: BeamerService.routerDelegate,
routeInformationParser: BeamerService.getBeamerParser,
backButtonDispatcher: BeamerService.getBeamerBackButtonDispatcher,
scrollBehavior: AppScrollBehavior(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
AppLocalizations.of(context)!.translate('Login'),
style: TextStyle(fontSize: 25),
textAlign: TextAlign.center,
),
SizedBox(height: 10),
Text(
AppLocalizations.of(context)!.translate('Location'),
style: TextStyle(fontSize: 25),
textAlign: TextAlign.center,
),
SizedBox(height: 10),
Text(
AppLocalizations.of(context)!.translate('Phone Number'),
style: TextStyle(fontSize: 25),
textAlign: TextAlign.center,
),
SizedBox(height: 10),
Text(
'这不会被翻译。',
style: TextStyle(fontSize: 25),
textAlign: TextAlign.center,
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () async {
var x = await ConfigService.setValueString(
'language',
ConfigService.getValueString('language') == 'zh'
? 'en'
: 'zh');
print('语言切换结果: $x');
RestartWidget.restartApp(context);
},
child: Text('切换语言'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () async {
BeamerService.push(context: context, route: 'person');
},
child: Text('跳转到用户页面'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () async {
LoadingOverlay.showFutureLoadingDialog(
backLabel: '返回',
barrierDismissible: true,
context: context,
future: () => Future.delayed(
Duration(seconds: 3),
() => print('加载完成'),
),
);
},
child: Text('测试加载动画'),
),
],
),
),
);
}
}
// 用户控制器
class PersonController extends MahgController {
List<dynamic>? usersList;
[@override](/user/override)
void init(Widget page) {
// 初始化逻辑
}
[@override](/user/override)
Future initLate(Widget page) async {
if (page is PersonPage) {
await getList();
}
}
Future<void> getList() async {
var result = await ApiService().httpGetDynamic('users');
if (result.success) {
print('获取用户数据成功: ${result.data}');
usersList = result.data;
} else {
usersList = [];
}
}
}
// 用户页面
class PersonPage extends MahgStatefulWidget<PersonController> {
const PersonPage({PersonController? controllerEx, super.key})
: super(controllerEx);
[@override](/user/override)
State<PersonPage> createState() => _PersonPageState();
}
class _PersonPageState extends MahgState<PersonPage, PersonController> {
[@override](/user/override)
PersonController createController() {
return widget.controller ?? PersonController();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: (controller.usersList == null || controller.usersList!.isEmpty)
? Center(child: Text('未找到数据'))
: Center(child: Text('数据展示区域')),
);
}
}
更多关于Flutter多功能集成插件mahg_essential_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复