hb_common
基础组件库,包含常用的基础组件(按钮,列表,表单,AppBar,Icon), extension,公共样式,工具类等。
- 国际化初始化与初始化 dialog
MaterialApp(
builder: HbDialog.setup(),
navigatorObservers: [HbDialog.navigatorObservers],
localizationsDelegates: const <LocalizationsDelegate<
Object?>>[
//...
HbCommonLocalizations.delegate,
],
)
<uses-permission android:name="android.permission.CAMERA"/>
- 本地存储
await HbStorage.init();
runApp(const MyApp());
// 使用
await HbStorage.set("key",value);
HbStorage.get("key");
- 通用列表,包含下拉刷新,上拉加载更多,回到顶部
- 使用
// 初始化分页入参的json key,默认是'page','pageSize';
HbPageApiCall.setUp(pageKey: "page", pageSizeKey: 'size');
// 实现model,后端分页的json需要继承HbPageModel
class PageModel implements HbPageModel {
// 这里可以根据自动生成的json model进行修改,
@override
@JsonKey(name: "page", defaultValue: 0)
final int page;
@override
@JsonKey(name: "size", defaultValue: 0)
final int pageSize;
@override
@JsonKey(name: "items", defaultValue: [])
List items;
// ...
}
// 使用下拉加载更多, HbPageApiCall中封装了更新和加载
final HbPageApiCall<OrderModel> pageApiCall =
HbPageApiCall<OrderModel>(Api.getList);
// Api.getList的类型是:Future<PageModel> getList(Map<String, dynamic> rowData)
HbList<OrderModel>(
apiCall: pageApiCall,
skeleton: const OrderSkeleton(),
itemBuilder: (context, index) {
final item = pageApiCall.items[index];
return OrderItem(item: item).onInkTap(() {
HbNav.push(Routes.orderDetail, arguments: item);
});
},
),
// 不使用下拉加载
HbList<OrderModel>(
itemCount:10,
skeleton: const OrderSkeleton(),
itemBuilder: (context, index) {
final item = pageApiCall.items[index];
return OrderItem(item: item).onInkTap(() {
HbNav.push(Routes.orderDetail, arguments: item);
});
},
),
- 表单工具
// 第一步:继承选项model,用于上拉选项列表
// 这里可以根据自动生成的json model进行修改
class SelectItemModel implements HbSelectItemModel {}
// 使用
final HbFormController _form = HbFormController();
void _submit() {
if (!_form.validate()) return;
// 处理你的逻辑
}
HbForm(formController: _form, children: [
HbSelect(
label: context.locale.token,
radioController: widget.tokenController,
enabled: false,
selectItems: tokenListFromProvider,
),
HbInput(
label: context.locale.amount,
controller: widget.amountController,
hintText: context.locale.enterAmount,
keyboardType: const TextInputType.numberWithOptions(
decimal: true),
inputFormatters: [HbAmountFormatter(digit: 6)],
),
]);
- 国际化
MaterialApp(
localizationsDelegates: const <LocalizationsDelegate<
Object?>>[
//...兼容hbcommon的国际化
...HbCommonLocalizations.localizationsDelegates,
],
)
- 全局颜色
// 初始化hb颜色
AppColor.init();
// 使用
HbColor.textBlack;
// 需要您自定义自己的颜色
class AppColor {
static init() {
HbColor.setup(
// 主体色
mainDarkColor: const Color(0xFF0C3294),
mainLightColor: const Color(0xFF0C3294),
// 背景色
bgWhite: const Color(0xffFFFFFF),
bgBlack: const Color(0xff1F1F1F),
bgGrey: const Color(0xffF3F3F3), // 未激活背景色
bgGreyLight: const Color(0xffF7F7F7),
bgGreyDark: const Color(0xffECECEC),
bgSuccessLight: const Color.fromRGBO(98, 201, 27, 0.15), // 涨,成功
bgErrorLight: const Color.fromRGBO(254, 81, 82, 0.15), // 涨,成功
bgWarnLight: const Color.fromRGBO(255, 162, 13, 0.15), // 涨,成功
// 文字色
textBlack: Colors.black,
textWhite: Colors.white,
textGrey: const Color(0xFF8F8F8F),
textGreyLight: const Color(0xFF959595),
textGreyDark: const Color(0xFF444745),
textError: const Color(0xffFE5152),
textSuccess: const Color(0xff62C91B), // 涨,成功
textWarn: const Color(0xffFFA20D), // 警告,提示
// 边框颜色
lineGrey: const Color(0xffF1F1F1),
// 遮罩层颜色
shadowBlack: const Color.fromRGBO(0, 0, 0, 0.15),
);
}
}
- 常用 extension
// 时间格式化
"1748577780".yMd;
1748577780.yMMMMd;
1748577780.yMdHms;
DateTime.now().yMdHm;
DateTime.now().dateToFormat(customFormat:DateFormat.yMd);
// widget extension pt pr等
Text("text").pt(32.w);
// 数字格式化
"123.2322".formatNum;
// 文字转为widget
"text".text12();
- 图标,支持网络,svg,本地图标,并缓存到本地
HbIcon(
icon: "http://",
width: 64.w,
)
- 上报异常
- 处理了同步异常和异步异常
// main.dart
void main() {
final errorReport = HbErrorReport(reportError: reportException);
// Run the app within the error-handling zone
errorReport.errorHandlingZone.run(() async {
// ....
runApp(const MyApp());
});
}
reportException(
Object error,
StackTrace? stackTrace,
) async {
if (error is DioException) return; // 忽略dio的网络错误
if (!kReleaseMode) return; // 非release模式不上报
debugPrint('上报异常');
// 处理您的逻辑
}
无法囊括所有,其他功能请看源码
Libraries
- app/hb_color
- app/hb_style
- app/index
- extensions/hb_date_format_extension
- extensions/hb_string_extension
- extensions/hb_text_extension
- extensions/hb_widget_extension
- extensions/index
- hb_common
- localization/hb_common_localizations
- localization/intl/messages
- localization/intl/messages_en
- localization/intl/messages_hi
- localization/intl/messages_pt
- localization/intl/messages_zh
- utils/hb_amount_formatter
- utils/hb_cache_file
- utils/hb_crypto
- utils/hb_dialog
- utils/hb_error_report
- utils/hb_num
- utils/hb_storage
- utils/hb_util
- utils/index
- widget/form/hb_form
- widget/form/hb_form_model
- widget/form/hb_input
- widget/form/hb_select
- widget/form/index
- widget/hb_app_bar
- widget/hb_icon
- widget/index
- widget/list/hb_list
- widget/list/hb_page_api_call
- widget/list/index