Flutter UI组件库插件uikit_flutter的使用

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

Flutter UI组件库插件uikit_flutter的使用

本包提供了一个统一的界面工具包和样式指南,用于Flutter项目。除了主题和加载器管理外,该包还包含一些有用的自定义标准小部件。

功能

该包包含以下内容:

  • 轻量和暗色主题管理及偏好保存

该包提供了在暗色或亮色主题下的颜色和样式的定义。它还包括一个 ThemeProvider 来管理切换主题并在 SharedPreferences 中存储偏好设置。要实现此主题管理,必须在宿主项目的 main.dart 文件中进行相应的添加。具体参考“使用”部分。

此外,该包还提供了以下小部件:

  • DropdownSelector
  • Loader
  • ShadowBox
  • ShadowBoxWithTitle
  • SearchBar
  • Accordion
  • ExpandableText
  • PageSkeleton
  • ExpandableFloatingContainer
  • TimePicker

使用

根据您的需求检查使用部分。
注意: 对于每种情况,都有不同的文件需要导入到您的项目中!通过IDE获取帮助。

主题管理

该包实现了一个简单的主题管理,包括亮色和暗色主题的定义,以及在本地内存中保存用户偏好。

要在应用程序中添加主题管理,请修改 main.dart 文件中的 build 方法如下:

return ThemeProviderBuilder(
    builder: (context, themeProvider) => MaterialApp(
            [...]
            themeMode: themeProvider.themeMode,
            theme: themeProvider.lightTheme,
            darkTheme: themeProvider.darkTheme,
            [...]
        ),
    loadingWidget: const Scaffold(), // 可选,指定在ThemeProvider加载时显示的内容
);

允许用户更改主题,可以简单地使用以下方法:

final themeProvider = Provider.of<ThemeProvider>(context);
themeProvider.setTheme(ThemeMode.light);

这也将用户的选择保存到 SharedPreferences 并在下次启动应用时恢复。

加载器

该包包含一个简单的 LoaderHelper,用于在页面顶部显示加载器,它是一个位于模糊背景上的居中GIF动画。初始化后,可以在应用程序中的任何位置使用加载器。

在使用之前,必须调用以下方法来初始化 LoaderHelper

LoaderHelper.shared.init(
    context,
    loaderWidget: Image.asset('assets/loader.gif',
          height: 70,
          width: 70,
          color: Colors.white), // 可选,默认为双环旋转GIF
    barrierColor: Colors.black54, // 可选,默认为showDialog的屏障颜色
);

传递的 context 应该是应用的最深 BuildContext

注意

  • 如果不调用此方法,则 LoaderHelper 的其他方法将不起作用(不会抛出错误)。
  • 如果传递了与根 BuildContext 不同的上下文,可能会在调试时抛出错误。

为了避免错误,在根小部件中调用 init 方法,即在 MaterialAppCupertinoApp 之后,或在“home”属性中。

如果您使用了 router,例如 MaterialApp.router,请在 RouterDelegate 中使用根 Navigator 小部件的 BuildContext

提示 如果您使用了 route_manager 包,可以通过调用以下方法来获取根上下文:

BuildContext? context = RouteManager.of(context).navigatorContext;

请注意,这是一个可选值,需要在使用前进行空值检查。

初始化后,可以通过以下方法使用加载器:

LoaderHelper.shared.show(scheduler: false);
LoaderHelper.shared.hide(scheduler: false);

如果 scheduler 属性为 true,则 showDialogNavigator.pop(context) 方法将在 build 方法之后用于显示/隐藏加载器。

搜索栏

一个带有方法来知道输入文本是否已更改的简单搜索栏。它支持暗色和亮色模式管理。

亮色搜索栏

暗色搜索栏

使用此小部件非常简单,如以下示例所示:

SearchBar(
    onChangeText: (value) {
        print(value);
        [...]
    },
)

阴影框

具有圆角和阴影的容器。

ShadowBox(
    removeMargin: false,
    child: [...],
),

带标题的阴影框

一个带圆角、阴影和顶部居中标题的容器。此外,还有启用展开/折叠动作的属性,以及定义默认小部件状态(展开/折叠)的属性。

带标题的阴影框

ShadowBoxWithTitle(
    title: "Hello",
    removeMargin: false,
    removeInnerPadding: true,
    shouldAllowHiding: false,
    isWarning: false,
    initiallyShowChild: true,
    child: [...],
)

下拉选择器

一个类似于下拉菜单的小部件,允许仅查看模式、单选和多选模式等更多功能。

DropdownSelector<int>(
    selectedItems: null,
    selectedItemLabel: "Select",
    onSelectItem: (item) => print(item),
    itemOverviewIconBuilder; (item) => Icon(Icons.favorite), // 可选
    onSelectItemOverview: (item) => print(item),
    items: () async => [0,1,2,3],
    allowMultiselection: false,
    filter: null,
    labelItemBuilder: (item) => item.toString(),
    enabled: true,
    child: null,
    searchBoxSize: null,
)

手风琴

一个具有标题和展开时显示的 Widget 的手风琴小部件。手风琴默认是折叠的。

Accordion(
    title: "Tap to expand",
    child: Text("Hello world"),
);

可扩展文本

可以展开显示更多行的多行文本。

ExpandableText(
    textSpan: TextSpan(
        text:
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."),
    maxLines: 1,
);

可展开浮动容器

一个易于使用的可定制浮动容器。

可展开浮动容器

ExpandableFloatingContainer(
    icon: (isExpanded) => Icon(isExpanded ? Icons.tv_off : Icons.tv),
    title: Text("Example Title"),
    backgroundColor: Colors.white,
    child: SizedBox(
        height: 300,
        child: Container(
            color: Colors.red
        )   
    )
);

时间选择器

基本的时间选择器,具有滚动小时、滚动分钟和关闭按钮。

TimePicker(
    hoursSemanticLabel: "Selettore ore",      // 小时选择器的语义标签 - 必须
    minutesSemanticLabel: "Selettore minuti", // 分钟选择器的语义标签 - 必须
    onTimeSelected: (Datetime : time){
        // 回调,返回所选时间 - 必须 
    },
    roundBorder : true,            // 圆角边框       - 可选,默认为false
    maxWidth: 180,                 // 宽度           - 可选,默认为180
    maxHeight: 200,                // 高度           - 可选,默认为200
    colorBackground: Colors.grey,  // 背景颜色       - 可选,默认为透明
    style = TextStyle(...),         // 非选中数字样式 - 可选,默认为TextStyle(color: black, fontsize: 12, fontWeight: FontWeight.normal)
    selectedStyle = TextStyle(...), // 选中数字样式   - 可选,默认为TextStyle(color: black, fontsize: 16, fontWeight: FontWeight.bold)
    initialTime: DateTime(...),    // 初始时间       - 可选,默认为系统时间
    hoursOffAxisFraction: -1.0,    // 小时轮盘边缘倾斜度 - 可选,默认为-1.0
    minutesOffAxisFraction: 1.0,   // 分钟轮盘边缘倾斜度 - 可选,默认为1.0
    diameterRatio: 1.1,            // 小部件高度与轮盘直径的比例 - 可选,默认为1.1,
    itemExtent = 25.0,             // 每个轮盘元素占据的空间 - 可选,默认为25.0
    selectedAtStart: false,        // 如果为真,则在初始化时调用onTimeSelected - 可选,默认为false
    debouncingWindow: Duration(...), // 在轮盘被操作时,防止短时间内多次调用onTimeSelected的时间窗口 - 可选,默认为300毫秒
    separatorPadding: 0.0,         // 分隔符周围的填充 - 可选,默认为0.0
),

更多关于Flutter UI组件库插件uikit_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter UI组件库插件uikit_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用uikit_flutter插件的示例代码。uikit_flutter是一个提供iOS风格UI组件的Flutter插件,可以帮助你快速构建具有iOS风格的界面。

首先,确保你已经在pubspec.yaml文件中添加了uikit_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  uikit_flutter: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

下面是一个简单的示例,展示了如何使用uikit_flutter中的一些组件:

import 'package:flutter/material.dart';
import 'package:uikit_flutter/components/uikit_button.dart';
import 'package:uikit_flutter/components/uikit_text_field.dart';
import 'package:uikit_flutter/components/uikit_alert.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('uikit_flutter Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // UIKit Text Field
              UIKitTextField(
                placeholder: 'Enter your name',
                onChanged: (value) {
                  print('Text field value: $value');
                },
              ),
              SizedBox(height: 20),

              // UIKit Button
              UIKitButton(
                title: 'Show Alert',
                onPressed: () {
                  showUIKitAlert(
                    context: context,
                    title: 'Hello',
                    message: 'This is a UIKit alert!',
                    actions: [
                      UIKitAlertAction(
                        title: 'OK',
                        style: UIKitAlertActionStyle.defaultStyle,
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                      ),
                    ],
                  );
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

解释

  1. UIKitTextField:

    • placeholder: 显示在文本字段中的占位符文本。
    • onChanged: 当文本字段的值改变时调用的回调。
  2. UIKitButton:

    • title: 按钮上显示的文本。
    • onPressed: 当按钮被点击时调用的回调。
  3. showUIKitAlert:

    • context: Flutter的BuildContext。
    • title: 警告框的标题。
    • message: 警告框的消息内容。
    • actions: 一个UIKitAlertAction对象的列表,定义警告框中的按钮。

这个示例展示了如何使用uikit_flutter提供的UIKitTextFieldUIKitButton组件,以及如何使用showUIKitAlert函数显示一个警告框。你可以根据需要进一步自定义和扩展这些组件。

请注意,由于插件版本可能会更新,具体API可能会有所变化,请参考最新的官方文档和插件源代码以确保代码的正确性。

回到顶部