Flutter多功能集成插件mahg_essential_package的使用

发布于 1周前 作者 vueper 来自 Flutter

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 回复

更多关于Flutter多功能集成插件mahg_essential_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mahg_essential_package 是一个 Flutter 多功能集成插件,旨在为开发者提供一系列常用的功能和工具,以简化开发流程并提高效率。以下是如何使用该插件的基本步骤和功能介绍。

1. 安装插件

首先,在 pubspec.yaml 文件中添加 mahg_essential_package 依赖:

dependencies:
  flutter:
    sdk: flutter
  mahg_essential_package: ^1.0.0  # 请根据实际情况选择最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:mahg_essential_package/mahg_essential_package.dart';

3. 使用插件功能

mahg_essential_package 提供了多种功能模块,以下是一些常见的功能示例:

3.1 网络请求

插件提供了简化的网络请求功能,支持 GET、POST 等请求方法。

import 'package:mahg_essential_package/mahg_essential_package.dart';

void fetchData() async {
  var response = await NetworkHelper.get('https://jsonplaceholder.typicode.com/posts');
  print(response.body);
}

3.2 本地存储

插件提供了本地存储功能,支持键值对存储。

import 'package:mahg_essential_package/mahg_essential_package.dart';

void saveData() async {
  await LocalStorage.setString('key', 'value');
}

void getData() async {
  String value = await LocalStorage.getString('key');
  print(value);
}

3.3 设备信息

插件可以获取设备的基本信息,如设备型号、操作系统版本等。

import 'package:mahg_essential_package/mahg_essential_package.dart';

void getDeviceInfo() {
  String deviceModel = DeviceInfo.deviceModel;
  String osVersion = DeviceInfo.osVersion;
  print('Device Model: $deviceModel, OS Version: $osVersion');
}

3.4 权限管理

插件提供了权限管理功能,支持请求和检查系统权限。

import 'package:mahg_essential_package/mahg_essential_package.dart';

void requestPermission() async {
  bool granted = await PermissionHelper.requestPermission(Permission.camera);
  if (granted) {
    print('Camera permission granted');
  } else {
    print('Camera permission denied');
  }
}

3.5 日志记录

插件提供了日志记录功能,方便调试和记录应用运行时的信息。

import 'package:mahg_essential_package/mahg_essential_package.dart';

void logMessage() {
  Logger.log('This is a debug message', level: LogLevel.debug);
  Logger.log('This is an error message', level: LogLevel.error);
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!