Flutter自定义组件插件my_widgets的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter自定义组件插件my_widgets的使用

概述

my_widgets 是一个由 Bilal MurtaZa 创建的Flutter包,提供了多种可复用的组件、工具函数、对话框和服务,旨在简化Flutter应用开发中的常见任务。该包允许开发者通过一行代码实现复杂功能。

特性

  • 提供常用的可复用组件如 Btn, Txt, Input, Dialogs, Dates 等。
  • 自定义对话框如 OverlayLoadingDialogForPage
  • 工具函数包括共享偏好设置 (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

1 回复

更多关于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应用中使用它。你可以根据需要扩展这个自定义组件的功能,并在多个项目中重用这些组件。

回到顶部