Flutter基础功能扩展插件yxr_flutter_basic的使用
Flutter基础功能扩展插件yxr_flutter_basic的使用
yxr_flutter_basic
Flutter
基础框架包项目,框架整体采用Getx
+MVVM
模式。内部封装了实用的基础类和工具类,可以帮助开发者快速完成Flutter
项目开发。项目适用于Android
、iOS
、web
三端,macOs
、windows
暂未测试。
集成说明
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页面的搭建。 -
BaseMultiStatePage
是BasePage
的子类,还有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
并设置isNeedAppBar
为false
。
BottomNavigationBarViewPager使用示例
TabbarViewPager使用示例
网格布局(GridView)
存在item占有不同列数的网格布局(StaggeredGrid)
瀑布流布局
属性动画组件示例
注意事项
- Json解析类生成可以使用
FlutterJsonToDart
插件(AndroidStudio
编译器)快速完成; BasePage
及其子类互相嵌套时,BasePage
的isCanBackPressed
务必设置为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
更多关于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('这是一个错误日志');
}