Flutter自定义组件插件my_widgets的使用
Flutter自定义组件插件my_widgets的使用
概述
my_widgets
是一个由 Bilal MurtaZa 创建的Flutter包,提供了多种可复用的组件、工具函数、对话框和服务,旨在简化Flutter应用开发中的常见任务。该包允许开发者通过一行代码实现复杂功能。
特性
- 提供常用的可复用组件如
Btn
,Txt
,Input
,Dialogs
,Dates
等。 - 自定义对话框如
OverlayLoading
和DialogForPage
。 - 工具函数包括共享偏好设置 (
Pref
)、日期格式化 (Dates
) 和HTTP请求 (HttpCalls
)。 - 支持用户通过内置函数更改整个应用程序的颜色。
开始使用
设置应用程序颜色
在 main()
函数之前调用以下代码来设置颜色方案:
WidgetsFlutterBinding.ensureInitialized();
String prdBaseURL = 'https://xvz/api/'; // 可选
String stgBaseURL = 'https://xvz/api/'; // 可选
await pSetSettings(
primaryColor: Colors.blueAccent,
secondaryColor: Colors.white,
defaultImage: 'assets/images/avatar.png',
defImageIsAsset: true,
baseUrlLive: prdBaseURL,
baseUrlTest: stgBaseURL,
isLive: false,
defaultRadius: Siz.defaultRadius,
defaultBtnHeight: Siz.defaultBtnHeight,
txtInputHasBorder: true,
txtInputHasLabel: true,
txtInputHasLabelOnTop: true,
txtInputHasLabelWithStar: false,
txtInoutDefaultContentPadding: const EdgeInsets.symmetric(horizontal: 10),
fontWeight: FontWeight.w600,
defaultFontSize: Siz.body17,
localization: 'ar',
onHttpCallError: callHttpError
);
runApp(const MyApp());
runMain();
使用共享偏好设置
如果需要使用共享偏好设置,请确保在 pSetSettings
之前调用 Pref.getPref()
:
await Pref.getPref();
pSetSettings();
runMain();
本地化日期
若需本地化日期,请在 pSetSettings
之前调用 Dates.initializeDateFormat()
:
await Dates.initializeDateFormat();
pSetSettings();
runMain();
示例 Demo
以下是完整的示例代码,展示如何使用 my_widgets
包中的组件和功能:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:my_widgets/dialogs/dialogs.dart';
import 'package:my_widgets/my_widgets.dart';
import 'package:my_widgets/utils/pref.dart';
import 'package:my_widgets/widgets/btn.dart';
import 'package:my_widgets/widgets/input.dart';
import 'package:my_widgets/widgets/txt.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Pref.getPref();
String stgBaseURL = 'https://xvz/api/';
await pSetSettings(
primaryColor: Colors.blueAccent,
secondaryColor: Colors.white,
defaultImage: 'assets/images/avatar.png',
defImageIsAsset: true,
baseUrlLive: stgBaseURL,
baseUrlTest: stgBaseURL,
isLive: false,
defaultRadius: 8.0,
defaultBtnHeight: 45.0,
txtInputHasBorder: true,
txtInputHasLabel: true,
txtInputHasLabelOnTop: true,
txtInputHasLabelWithStar: false,
txtInoutDefaultContentPadding: const EdgeInsets.symmetric(horizontal: 10),
fontWeight: FontWeight.w600,
defaultFontSize: 17.0,
localization: 'ar',
onHttpCallError: callHttpError);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My Widgets Example'),
),
body: MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController inputController = TextEditingController();
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(30.0),
child: ListView(
children: [
Txt('Hello World!', textColor: Colors.blue, hasBold: true),
SizedBox(height: 20),
TxtFormInput(
controller: inputController,
hintText: 'Enter text here',
hasBorder: true,
radius: 8.0,
),
SizedBox(height: 20),
BtnSF(
text: 'Show Dialog',
onPressed: () {
Dialogs.showCustomDialog(body: Center(child: Text('This is a dialog')));
},
bgColor: Colors.green,
),
],
),
);
}
}
callHttpError(dynamic error, response, bool? defaultResponse) {
print('Error occurred: $error');
}
Android 和 iOS 配置
URL Launcher 配置
Android
在 AndroidManifest.xml
中添加以下查询:
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="sms" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="*/*" />
</intent>
</queries>
iOS
在 info.plist
中添加以下条目:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>sms</string>
<string>tel</string>
<string>http</string>
<string>https</string>
</array>
更多关于Flutter自定义组件插件my_widgets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义组件插件my_widgets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中自定义组件插件 my_widgets
的一个基本示例。这个示例将展示如何创建一个简单的自定义组件,并在Flutter应用中使用它。
1. 创建自定义组件插件 my_widgets
首先,你需要创建一个新的Flutter插件项目。如果你还没有安装Flutter和Dart,请先安装它们。
flutter create --template=plugin my_widgets
这将创建一个名为 my_widgets
的新Flutter插件项目。
2. 编辑插件代码
进入插件项目目录,编辑 lib/my_widgets.dart
文件。例如,我们创建一个简单的自定义按钮组件:
// lib/my_widgets.dart
import 'package:flutter/material.dart';
class MyCustomButton extends StatelessWidget {
final String label;
final VoidCallback onPressed;
const MyCustomButton({Key? key, required this.label, required this.onPressed}) : super(key: key);
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text(label),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.blue),
foregroundColor: MaterialStateProperty.all(Colors.white),
),
);
}
}
3. 发布插件(可选)
如果你打算将这个插件发布到pub.dev,你需要按照pub.dev的发布指南进行。这里我们只关注如何在本地项目中使用这个插件。
4. 在Flutter应用中使用自定义插件
现在,你需要在你的Flutter应用项目中添加这个自定义插件。
4.1 添加插件依赖
在你的Flutter应用项目的 pubspec.yaml
文件中添加本地路径依赖:
dependencies:
flutter:
sdk: flutter
my_widgets:
path: ../path/to/my_widgets # 替换为实际的路径
4.2 使用自定义组件
在你的应用项目中,你可以像使用任何其他Flutter包一样使用这个插件。例如,在 lib/main.dart
中:
// lib/main.dart
import 'package:flutter/material.dart';
import 'package:my_widgets/my_widgets.dart'; // 导入自定义插件
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _handlePress() {
print('Button pressed!');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: MyCustomButton(
label: 'Press Me',
onPressed: _handlePress,
),
),
);
}
}
总结
以上代码展示了如何创建一个简单的Flutter自定义组件插件 my_widgets
,并在Flutter应用中使用它。你可以根据需要扩展这个自定义组件的功能,并在多个项目中重用这些组件。