Flutter基础功能扩展插件yxr_flutter_basic的使用

Flutter基础功能扩展插件yxr_flutter_basic的使用

yxr_flutter_basic

Flutter基础框架包项目,框架整体采用Getx+MVVM模式。内部封装了实用的基础类和工具类,可以帮助开发者快速完成Flutter项目开发。项目适用于AndroidiOSweb三端,macOswindows暂未测试。

集成说明

1. 项目pubspec.yaml文件中加入依赖

dependencies:
   # 集成yxr_flutter_basic依赖
   yxr_flutter_basic: ^0.2.2
   # 集成yxr_flutter_basic内部使用到的依赖
   fluttertoast: ^8.2.2
   device_info_plus: ^9.1.0
   permission_handler: ^11.0.1
   shared_preferences: ^2.2.2
   crypto: ^3.0.3
   dio: ^5.3.2
   sqflite: ^2.3.0
   json_annotation: ^4.8.0
   visibility_detector: ^0.4.0+2
   logger: ^2.0.2+1
   easy_refresh: ^3.3.2+2
   image_picker: ^1.0.4
   get: ^4.6.6
   get_storage: ^2.1.1
   path_provider: ^2.1.1
   webview_flutter: ^4.4.1
   url_launcher: ^6.2.1
   package_info_plus: ^4.2.0
   cached_network_image: ^3.3.0
   flutter_staggered_grid_view: ^0.7.0
   uuid: ^4.2.1
   encrypt: ^5.0.3
   pointycastle: ^3.7.3
   path: ^1.8.3
   build_runner: ^2.3.3
   json_serializable: ^6.6.0

2. 在程序入口main.dart中完成初始化

import 'package:flutter/material.dart';
import 'package:get/get_navigation/src/root/get_material_app.dart';
import 'package:yxr_flutter_basic/base/extension/BuildContextExtension.dart';
import 'package:yxr_flutter_basic/base/http/HttpManager.dart';
import 'package:yxr_flutter_basic/base/http/cache/CacheConfig.dart';
import 'package:yxr_flutter_basic/base/http/model/RespConfig.dart';
import 'package:yxr_flutter_basic/base/ui/page/SimpleSplashPage.dart';
import 'FunctionListPage.dart';

void main() async {
  /// Step1. 初始化Basic
  await Basic.init();
  /// Step2. 初始化网络请求配置
  await HttpManager.getInstance().init(
    // 接口请求的BaseUrl
    baseUrl: "http://www.baid.com/",
    // 如果接口请求需要启用缓存,不需要缓存可不配置
    cacheConfig: CacheConfig(),
    debug: true,
    // 返回结果配置,接口返回之后进行内部结果解析
    respConfig: RespConfig(filedCode: "code", filedMsg: "message", successCode: "200"));
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    /// Step3. 替换成Gex主题App
    return GetMaterialApp(
      title: 'Flutter',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      /// Step4. 完成自己的home配置
      home: Text(),
    );
  }
}

使用说明

如何快速完成页面搭建

  • BasePage基础类包含常见的loading、toast、Page生命周期回调等。结合BaseVM可以帮助开发者快速完成Page页面的搭建。

  • BaseMultiStatePageBasePage的子类,还有AppBar和多状态管理功能,结合BaseMultiVM可以帮助开发者快速完成多状态页面搭建。

  • BaseListVM.dart 快速完成列表页面搭建。

  • BasePageListVM.dart 快速完成下拉刷新、上拉加载更多的分页列表页面搭建。

网络分页请求

具体参考商品列表分类加载,网络请求商品详情

权限申请

调用BseVM以下方法:

/// 请求权限
void requestPermission(PermissionReq permissionReq) {
  if (_context != null) {
    PermissionUtil.requestPermission(_context!, permissionReq);
  }
}

LiveEvent使用示例

文件下载

具体参考商品详情

沉浸式状态栏

具体参考商品详情

  • 继承BaseMultiPage时设置extendBodyBehindAppBar: true;
  • VM中设置appbarController.appbarBackgroundColor = Colors.transparent;

BaseMultiPage不要appbar

继承BaseMultiPage并设置isNeedAppBarfalse

BottomNavigationBarViewPager使用示例

TabbarViewPager使用示例

网格布局(GridView)

存在item占有不同列数的网格布局(StaggeredGrid)

瀑布流布局

属性动画组件示例

注意事项

  • Json解析类生成可以使用FlutterJsonToDart插件(AndroidStudio编译器)快速完成;
  • BasePage及其子类互相嵌套时,BasePageisCanBackPressed务必设置为false
  • 如果需要动态控制wantKeepAlive以达到缓存PageView多个子Page请使用BasePageViewPage,具体可以参考TabViewPagerPage
  • 如果你的项目需要支持Web平台,请将以下代码添加到web平台下index.html文件的中:
<script>
    /**
     * 下载
     * @param  {string} url 目标文件地址
     * @param  {string} filename 想要保存的文件名称
     * @param onProgress
     * @param onSuccess
     * @param onFailed
     */
    function download(url, filename, onProgress, onSuccess, onFailed) {
      this.getBlob(url, onProgress).then(blob => {
        this.saveAs(blob, filename);
        onSuccess();
      }).catch(e => {
        onFailed(e.toString());
      });
    }

    /**
     * 获取  blob
     * @param  {string} url 目标文件地址
     * @param onProgress
     * @return {Promise}
     */
    function getBlob(url, onProgress) {
      return new Promise(function (resolve, reject) {
        const xhr = new XMLHttpRequest();

        xhr.open("GET", url, true);
        xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
        xhr.responseType = "blob";
        xhr.onload = () => {
          if (xhr.status === 200) {
            resolve(xhr.response);
          } else {
            reject('下载失败');
          }
        };
        //监听进度事件
        xhr.addEventListener(
          "progress",
          function (evt) {
            if (evt.lengthComputable) {
              onProgress(evt.loaded, evt.total)
            }
          },
          false
        );
        xhr.onerror = (e) => {
          reject('下载失败: ' + e.toString());
        };
        xhr.send();
      });
    }

    /**
     * 保存
     * @param  {Blob} blob
     * @param  {String} filename 想要保存的文件名称
     */
    function saveAs(blob, filename) {
      // ie的下载
      if (window.navigator.msSaveOrOpenBlob) {
        navigator.msSaveBlob(blob, filename);
      } else {
        // 非ie的下载
        const link = document.createElement("a");
        const body = document.querySelector("body");

        link.href = window.URL.createObjectURL(blob);
        link.download = filename;

        // fix Firefox
        link.style.display = "none";
        body.appendChild(link);

        link.click();
        body.removeChild(link);

        window.URL.revokeObjectURL(link.href);
      }
    }
</script>

更多关于Flutter基础功能扩展插件yxr_flutter_basic的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


yxr_flutter_basic 是一个 Flutter 基础功能扩展插件,旨在提供一些常用的功能封装,以便开发者可以更快速、便捷地实现一些常见的需求。以下是如何使用 yxr_flutter_basic 插件的基本步骤和功能说明。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 yxr_flutter_basic 插件依赖:

dependencies:
  flutter:
    sdk: flutter
  yxr_flutter_basic: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

2. 导入插件

在你的 Dart 文件中导入 yxr_flutter_basic

import 'package:yxr_flutter_basic/yxr_flutter_basic.dart';

3. 使用插件功能

yxr_flutter_basic 提供了多种基础功能扩展,以下是一些常见的功能示例:

3.1. 网络请求

import 'package:yxr_flutter_basic/yxr_flutter_basic.dart';

void fetchData() async {
  var response = await HttpUtils.get('https://jsonplaceholder.typicode.com/posts');
  if (response.statusCode == 200) {
    print('Data: ${response.body}');
  } else {
    print('Failed to load data');
  }
}

3.2. 本地存储

import 'package:yxr_flutter_basic/yxr_flutter_basic.dart';

void saveData() async {
  await StorageUtils.saveString('key', 'value');
  String? value = await StorageUtils.getString('key');
  print('Saved value: $value');
}

3.3. 设备信息

import 'package:yxr_flutter_basic/yxr_flutter_basic.dart';

void getDeviceInfo() {
  String deviceId = DeviceUtils.deviceId;
  String platform = DeviceUtils.platform;
  print('Device ID: $deviceId, Platform: $platform');
}

3.4. 弹窗工具

import 'package:yxr_flutter_basic/yxr_flutter_basic.dart';

void showDialog() {
  DialogUtils.showAlertDialog(
    context: context,
    title: '提示',
    message: '这是一个简单的提示框',
    confirmText: '确定',
    onConfirm: () {
      print('确定按钮被点击');
    },
  );
}

3.5. 日志工具

import 'package:yxr_flutter_basic/yxr_flutter_basic.dart';

void logMessage() {
  LogUtils.d('这是一个调试日志');
  LogUtils.i('这是一个信息日志');
  LogUtils.w('这是一个警告日志');
  LogUtils.e('这是一个错误日志');
}
回到顶部