Flutter自定义组件集合插件mwidgets的使用
Flutter自定义组件集合插件mwidgets的使用
MWidget 描述
mwidgets
包含了一系列自定义组件,如 MText
, MDropdown
, MFileImage
, MNetworkImage
, MLottie
, MSvg
, MBouncingButton
, MRating
, MPinPut
, MScroll
, MTextFiled
, MRangeItemWidget
, MRadioItemWidget
等。
设置
首先需要在应用启动时设置 MWidgets
的配置参数:
import 'package:flutter/material.dart';
import 'package:mwidgets/setup.dart';
void main() {
MWidgetsSetUp.settings(
fontEn: "",
fontAr: "",
primary: Colors.black,
secondPrimary: Colors.white,
);
runApp(const MyApp());
}
示例
MText
MText
是一个自定义文本组件,支持设置文本大小和字体权重。
MText(
text: product.name,
size: FoontSize.font18,
weight: FontWeight.w500,
).addPadding(vertical: 12.0),
MSvg
MSvg
用于加载 SVG 图标。
const MSvg(
name: Svgs.arrowBack,
height: 32.0,
)
MNetworkImage
MNetworkImage
用于加载网络图片。
MNetworkImage(
url: category.image,
height: 45.0,
width: 45.0,
fit: BoxFit.cover,
),
MLottieImage
MLottieImage
用于加载 Lottie 动画文件。
MLottieImage(
name: category.image,
height: 45.0,
width: 45.0,
fit: BoxFit.cover,
),
MFileImage
MFileImage
用于加载本地文件图片。
MFileImage(
file: "",
height: 45.0,
width: 45.0,
fit: BoxFit.cover,
),
MAssetImage
MAssetImage
用于加载项目资源图片。
MAssetImage(
name: item.icon,
width: context.w * 0.85,
fit: BoxFit.contain,
);
MPinput
MPinput
用于创建带验证的密码输入框。
MPinput(
mKey: const Key('pinPut'),
length: 6,
onChanged: verifyCubit.setCode,
keyboardType: TextInputType.number,
).addPadding(bottom: 24.0),
MDropDown
MDropDown
用于创建下拉选择框。
MDropDown<CategoryModel>(
inFill: false,
options: cubit.categories,
setInitial: cubit.category,
title: context.tr.chooseCategory,
hint: context.tr.chooseCategory,
itemTitle: (item) => item.name,
onChanged: cubit.setCategory,
).addPadding(bottom: 20.0),
MTextFiled
MTextFiled
用于创建带边框的输入框,并支持验证功能。
MTextFiled(
controller: cubit.password,
obscureText: hide,
paddingVertical: 8.0,
suffix: icon,
hintText: context.tr.password,
border: OutlineInputBorder(
borderSide: BorderSide(color: Coolors.highLight),
borderRadius: BorderRadius.circular(5.0),
),
validator: (valid) {
return Validates.isPassword(
password: cubit.password.text,
errorMessage: context.tr.passwordIsShort,
);
},
).addPadding(bottom: 12.0),
MPasswordWidget 和 Validates
MPasswordWidget
可以嵌套其他输入框,并支持验证功能。
MPasswordWidget(
child: (icon, hide) {
kPrint(hide);
return MTextFiled(
controller: cubit.password,
obscureText: hide,
paddingVertical: 8.0,
suffix: icon,
hintText: context.tr.password,
border: OutlineInputBorder(
borderSide: BorderSide(color: Coolors.highLight),
borderRadius: BorderRadius.circular(5.0),
),
validator: (valid) {
return Validates.isPassword(
password: cubit.password.text,
errorMessage: context.tr.passwordIsShort,
);
},
);
},
).addPadding(bottom: 12.0),
MProgressButton
MProgressButton
用于创建带进度条的按钮。
MProgressButton(
progress: 1,
onTap: () {
},
).addPadding(bottom: 21.0),
MSvgButton
MSvgButton
用于创建带有 SVG 图标的按钮。
MSvgButton(
width: 60.0,
height: 60.0,
icon: Svgs.delete,
iconSize: 30.0,
borderRadius: 16.0,
onTap: () {
},
),
MBouncingButton
MBouncingButton
用于创建带有弹跳动画效果的按钮。
MBouncingButton(
title: context.tr.edit,
onTap: () {
context.pushReplacement(
AddNewOrUpdateShipmentScreen(
moreShipment: moreShipment,
shipment: shipment,
),
);
},
),
MAnimatedButton
MAnimatedButton
用于创建带有动画效果的按钮。
MAnimatedButton(
onTap: () async {
await cubit.addToCart(productId: product.id);
},
title: context.tr.addToCart,
success: Row(
children: [
const MSvg(
name: Svgs.cartDone,
height: 28.0,
color: Coolors.greenAccent,
).addPadding(end: 12.0),
MText(
text: context.tr.done,
size: FoontSize.font18,
color: Coolors.greenAccent,
)
],
),
);
MDividerItemWidget
MDividerItemWidget
用于创建分割线。
const MDividerItemWidget(),
MTitleDividerItemWidget
MTitleDividerItemWidget
用于创建带有标题的分割线。
const MTitleDividerItemWidget(title: "OR")
MRatingItem
MRatingItem
用于创建评分组件。
MRatingItem(
rating: 4.5,
oneStar: true,
onRatingUpdate: (value) {},
).addPadding(start: 8.0)
MPadding.set()
MPadding.set()
用于设置内边距。
const Padding(
padding: MPadding.set(horizontal: 21.0),
child: MSvg(name: Svgs.date),
),
MBorderRadius
MBorderRadius
用于设置圆角。
borderRadius: MBorderRadius.set(all: 8.0),
MScroll
MScroll
用于创建水平滚动视图。
return MScroll(
axis: Axis.horizontal,
child: Row(
children: cubit.products.map((item) {
return ProductItemWidget(
product: item,
);
}).toList(),
),
);
Loader
Loader
用于创建加载动画。
Loader.loadingSkeleton(
height: context.h * 0.14,
width: context.w * 0.7,
);
Loader.loadingText(
height: context.w * 0.04,
width: context.w * 0.3,
padding: const MPadding.set(start: 24),
),
ImagesViewerScreen
ImagesViewerScreen
用于展示多张图片。
context.push(
ImagesViewerScreen(
urls: images,
initialImage: initialImage,
),
);
FToast
FToast
用于显示提示信息。
FToast.showError(context: context, message: message);
FToast.showSuccess(context: context, message: message);
showMBottomSheet
showMBottomSheet
用于显示底部弹出框。
showReviewsBottomSheet({
required BuildContext context,
required String productId,
}) {
showMBottomSheet(
context: context,
noScrolling: true,
bottomSheet: ReviewsBottomSheet(productId: productId),
);
}
showMCupertinoDialog
showMCupertinoDialog
用于显示 iOS 风格的对话框。
showCheckMailDialog({required BuildContext context}) {
showMCupertinoDialog(
context: context,
child: const CheckMailDialog(),
);
}
PhoneValidator
PhoneValidator
用于验证手机号码格式。
final phoneValidate = PhoneValidator();
StreamBuilder<bool>(
initialData: true,
stream: phoneValidate.validate.stream,
builder: (context, snapshot) {
return MTextFiled(
mKey: const Key('phone'),
onChanged: (value) {
phoneValidate.getPhone(phone: value);
},
controller: cubit.phone,
title: context.tr.phoneNumber,
hintText: '01× ×××× ××××',
prefix: const MSvg(name: Svgs.phone),
keyboardType: TextInputType.phone,
validator: (valid) {
if (snapshot.data!) {
return null;
}
return context.tr.pleaseEnterValidPhone;
},
);
},
).addPadding(bottom: 18.0),
Validates
Validates
提供了一些常用的验证方法。
Validates.isPassword(
password: cubit.oldPassword.text,
errorMessage: context.tr.passwordIsShort,
);
Validates.isConfirmPassword(
password: cubit.newPassword.text,
confrimPassword: cubit.confirmPassword.text,
errorMessage: context.tr.notSamePassword,
);
Validates.isEmail(
email: cubit.email.text,
errorMessage: context.tr.emailIsNotValid,
);
Validates.isHasData(
data: cubit.fullName.text,
errorMessage: context.tr.enterYourName,
);
扩展方法
日期格式化
提供了多种日期格式化的方法。
"".toNameOfMonthAndTime;
"".toDateOnly;
"".toDateAndTime;
"".ago;
"".toTimeOnly;
"".toMonthAndDay;
"".toYearMonthDay;
Context
提供了多种与 BuildContext
相关的方法。
final height = context.mHeight;
final width = context.mWidth;
final orientation = context.mOrientation;
final canPop = context.canPop;
final maybePop = context.maybePop;
context.push(
ProductDetailsScreen(
product: item,
),
);
context.pushReplacement(
ProductDetailsScreen(
product: item,
),
);
context.pushAndRemoveUntil(
ProductDetailsScreen(
product: item,
),
);
context.pushNamed("/login");
context.pushReplacementNamed("/login");
context.pushNamedAndRemoveUntil("/login");
context.pop();
.addAction()
.addAction()
方法可以为任意组件添加点击事件。
MSvg(
height: 26.0,
name: Svgs.saved,
color: Coolors.grey,
).addAction(
onGesture: () {
},
);
kPrint
kPrint
方法用于打印日志。
kPrint("Hello World");
更多关于Flutter自定义组件集合插件mwidgets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义组件集合插件mwidgets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用自定义组件集合插件mwidgets
的示例代码。请注意,为了实际运行以下代码,你需要确保已经安装并配置好了Flutter开发环境,并且已经通过pubspec.yaml
文件添加了mwidgets
依赖。
首先,确保在pubspec.yaml
文件中添加mwidgets
依赖:
dependencies:
flutter:
sdk: flutter
mwidgets: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,让我们编写一个示例Flutter应用,展示如何使用mwidgets
中的一些自定义组件。
示例代码
main.dart
import 'package:flutter/material.dart';
import 'package:mwidgets/mwidgets.dart'; // 导入mwidgets库
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MWidgets 示例',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MWidgets 自定义组件示例'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
// 使用 MButton 自定义按钮
MButton(
text: '点击我',
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('按钮被点击了!')),
);
},
),
// 使用 MTextField 自定义文本输入框
SizedBox(height: 20),
MTextField(
label: '用户名',
placeholder: '请输入用户名',
onChanged: (value) {
print('用户名输入框内容: $value');
},
),
// 使用 MCheckBox 自定义复选框
SizedBox(height: 20),
MCheckBox(
value: true,
onChanged: (newValue) {
print('复选框状态: $newValue');
},
label: '接受条款和条件',
),
// 使用 MDatePicker 日期选择器
SizedBox(height: 20),
MDatePicker(
initialDate: DateTime.now(),
onDateSelected: (date) {
print('选择的日期: $date');
},
),
],
),
),
);
}
}
说明
- MButton: 自定义按钮组件,可以通过
onPressed
回调处理点击事件。 - MTextField: 自定义文本输入框组件,通过
onChanged
回调处理文本变化。 - MCheckBox: 自定义复选框组件,通过
onChanged
回调处理状态变化。 - MDatePicker: 自定义日期选择器组件,通过
onDateSelected
回调处理日期选择事件。
运行应用
确保所有代码无误后,通过命令行运行flutter run
即可在模拟器或实际设备上查看效果。
注意
- 由于
mwidgets
是一个假想的库,具体的API和方法可能有所不同。因此,你需要参考mwidgets
的实际文档来确保API的正确使用。 - 如果有任何自定义组件的特定需求,你可以查阅
mwidgets
的文档或GitHub仓库以获取更多信息。
希望这个示例代码能帮助你理解如何在Flutter项目中使用mwidgets
自定义组件集合插件。