Flutter UI组件库插件kloktun_uikit的使用
Flutter UI组件库插件kloktun_uikit的使用
特性
包括用于构建界面的UI组件。例如按钮、文本字段等。
import 'package:example/tabs.dart';
import 'package:flutter/material.dart' hide ButtonThemeData;
import 'package:kloktun_uikit/common/controls.dart';
import 'package:kloktun_uikit/components/radio/radio_group.dart';
import 'package:kloktun_uikit/components/theme/theme.dart';
import 'package:kloktun_uikit/kloktun_uikit.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用程序的根。
[@override](/user/override)
Widget build(BuildContext context) {
return KloktunUIProvider(
child: KloktunUIConsumer(builder: (context, state) {
return MaterialApp(
title: 'Flutter Demo',
theme: state.themeData,
home: const MyHomePage(title: 'Home Page'),
);
}),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
// 这个小部件是你的应用主页。它是一个有状态的小部件,意味着它有一个状态对象(在下面定义)包含影响其外观的字段。
// 这个类是状态的配置。它持有由父级(在这个例子中是App小部件)提供的值(在这个例子中是标题),并被状态的构建方法使用。小部件子类中的字段总是标记为"final"。
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
double value = 1;
setValue(double newValue) {
setState(() {
value = newValue;
});
}
void _incrementCounter() {
KloktunUIState.of(context).setTheme(KloktunTheme(
colors: KloktunThemeColors(
primary: Colors.white, background: Color(0xFF202020))));
setState(() {
_counter++;
});
}
var loading = false;
_toggleLoading() {
setState(() {
loading = !loading;
});
}
List<int?> values = [null, 2];
changeValues(List<int?> newValues) {
setState(() {
values = newValues;
});
}
handlePopup() async {
var globalLoader = KGlobalSpinner(context);
globalLoader.show();
await Future.delayed(Duration(seconds: 2));
globalLoader.close();
var result = await showKConfirmPopup(
context: context,
danger: true,
icon: Icon(Icons.abc),
title: Text("标题"),
child: Text(
"你确定吗?",
),
buttonsDirection: Axis.horizontal,
confirmButtonText: "是的,确定",
cancelButtonText: "不确定");
print(result);
showKMessagePopup(
context: context,
// danger: true,
title: Text("标题"),
child: Text(
"发生了一些事情",
),
buttonsDirection: Axis.horizontal,
okayButtonText: '明白了');
}
int? selectValue;
setSelectValue(int? value) {
setState(() {
selectValue = value;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: KAppBar(
title: Text(widget.title),
),
body: Center(
// Center 是一个布局小部件。它接受一个子项,并将其定位在父级的中间。
child: Column(
// Column 也是一个布局小部件。它接受一个子项列表,并垂直排列它们。默认情况下,它水平大小适配其子项,并尝试与父级一样高。
//
// Column 有许多属性来控制其自身的大小及其子项的位置。在这里我们使用mainAxisAlignment来将子项垂直居中;主轴是垂直轴,因为Columns是垂直的(交叉轴将是水平的)。
//
// 尝试一下:调用"调试绘制"(在IDE中选择"切换调试绘制"操作,或在控制台中按"p"),可以看到每个小部件的线框。
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
KButton(
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (_) => TabsPage()));
},
size: ControlSize.regular,
child: const Text("选项卡")),
KSwitch(
value: loading,
onChange: (newValue) {
setState(() {
loading = newValue;
});
}),
KSelect<int?>(
icon: Icon(Icons.ac_unit_outlined),
placeholder: "选择数字",
value: selectValue,
size: ControlSize.large,
onChange: setSelectValue,
clearable: true,
options: const [
KSelectOption(
icon: Icon(Icons.abc),
value: 1,
child: Text("另一个子项"),
divider: true),
KSelectOption(
value: 2,
label: Text("一些数据 2"),
),
KSelectOption(
value: 3,
label: Text("一些数据 3"),
)
]),
KButton(child: Text("显示弹窗"), onPressed: handlePopup),
KInput(
placeholder: "嘿,怎么了",
),
KTextarea(
size: ControlSize.regular,
placeholder: "嘿,怎么了",
minLines: 1,
maxLines: 4,
),
VGap(8),
KTextarea(
size: ControlSize.regular,
placeholder: "嘿,怎么了",
minLines: 2,
maxLines: 4,
),
VGap(8),
KInput(
success: true,
warning: true,
error: true,
obscureText: true,
togglePassword: true,
clearable: true,
placeholder: "输入一些东西",
// prepend: KButton(
// type: KButtonType.borderless, child: Text("做一些")),
// prefix: Text("一些前缀"),
prefix: KIconButton(
child: Icon(Icons.search),
),
prefixIcon: Icon(Icons.circle),
// prefixText: "前缀文本",
prefixPlaceholder: "vk.com/",
// suffixPlaceholder: "后缀占位符",
// suffixText: "后缀文本",
// suffixIcon: Icon(Icons.abc),
// suffix: Text("一些后缀"),
// append: KButton(
// type: KButtonType.borderless,
// child: Text("做一些"),
// )
),
KButton(
loading: loading,
// disabled: true,
type: KButtonType.plain,
size: ControlSize.medium,
warning: true,
child: Text("你好"),
),
KIconButton(
loading: loading,
// disabled: true,
type: KIconButtonType.primaryText,
// warning: true,
onPressed: _toggleLoading,
error: true,
child: Icon(KloktunIcons.search),
),
KCheckbox(
value: loading,
onChange: (newValue) {
setState(() {
loading = newValue;
});
},
child: Text("一些数据"),
),
KLabel(
label: Text("只是一个标签"),
child: Text("一些值"),
),
KDivider(),
KHelper(
// text: Text("只是一个助手"),
error: Text("只是一个错误"),
// suffix: Text("一些后缀"),
child: Text("一些字段"),
),
KDivider(),
Padding(
padding: EdgeInsets.all(16),
child: KAlert(
icon: Icon(KloktunIcons.circle),
// title: Text("一些标题"),
child: Text("一些子项"),
// error: true,
// warning: true,
// success: true,
// suffix: KButton(
// child: Text("点击我"),
// ),
),
),
KDivider(),
Checkbox(
value: loading,
onChanged: (newValue) {
setState(() {
loading = newValue ?? false;
});
}),
KCheckboxGroup<int?>(
options: const [
KCheckboxGroupOption(value: null, child: Text("1")),
KCheckboxGroupOption(value: 2, disabled: true, child: Text("2")),
KCheckboxGroupOption(value: 3, child: Text("3")),
],
values: values,
onChange: changeValues,
),
KRadioGroup(
value: loading,
// disabled: true,
onChange: (value) {
setState(() {
loading = value;
});
},
options: const [
KRadioGroupOption(
value: false,
disabled: true,
child: Text("未加载"),
),
KRadioGroupOption(value: true, child: Text("加载中"))
],
),
KButton(
onPressed: _toggleLoading,
size: ControlSize.regular,
child: const Text("加载中"),
),
KButton(
onPressed: _toggleLoading,
size: ControlSize.regular,
type: KButtonType.primary,
icon: Icon(Icons.circle),
child: const Text("查找"),
),
KDivider(
// indent: 10,
// endIndent: 20,
// childAlign: KDividerChildAlign.center,
// child: Text("或"),
),
Container(
padding: EdgeInsets.symmetric(
// horizontal: 100
),
width: double.infinity,
child: KSlider(
value: value, min: 1, max: 7, step: 1, onChange: setValue)),
VGap(100),
Slider(
value: value,
min: 1,
max: 7,
onChanged: setValue,
),
Text("值: $value"),
const Text(
'你已经按了这个按钮这么多次:',
),
TextField(
decoration: InputDecoration(hintText: "一些文本"),
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: '增加',
child: const Icon(Icons.add),
), // 这个尾随逗号使自动格式化更美观。
);
}
}
更多关于Flutter UI组件库插件kloktun_uikit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter UI组件库插件kloktun_uikit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
kloktun_uikit
是一个 Flutter 的 UI 组件库插件,它提供了一系列预构建的 UI 组件,帮助开发者快速构建美观且功能丰富的应用程序。以下是关于如何使用 kloktun_uikit
的基本指南。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 kloktun_uikit
依赖。
dependencies:
flutter:
sdk: flutter
kloktun_uikit: ^1.0.0 # 使用最新版本
然后,运行 flutter pub get
来获取依赖。
2. 导入库
在你的 Dart 文件中导入 kloktun_uikit
库。
import 'package:kloktun_uikit/kloktun_uikit.dart';
3. 使用组件
kloktun_uikit
提供了多种 UI 组件,你可以直接在项目中使用它们。以下是一些常见组件的示例:
按钮组件
KloktunButton(
onPressed: () {
// 按钮点击事件
},
text: 'Click Me',
color: Colors.blue,
);
卡片组件
KloktunCard(
child: Column(
children: [
Text('Card Title'),
Text('This is a card content.'),
],
),
);
输入框组件
KloktunTextField(
hintText: 'Enter your name',
onChanged: (value) {
// 输入内容变化时的回调
},
);
加载指示器
KloktunLoadingIndicator(
size: 50.0,
color: Colors.blue,
);
4. 自定义主题
kloktun_uikit
允许你自定义主题,以便更好地适配你的应用程序风格。
MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
5. 示例代码
以下是一个简单的示例,展示了如何使用 kloktun_uikit
中的一些组件。
import 'package:flutter/material.dart';
import 'package:kloktun_uikit/kloktun_uikit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Kloktun UI Kit Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Kloktun UI Kit Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
KloktunButton(
onPressed: () {
print('Button Clicked');
},
text: 'Click Me',
color: Colors.blue,
),
SizedBox(height: 20),
KloktunCard(
child: Column(
children: [
Text('Card Title'),
Text('This is a card content.'),
],
),
),
SizedBox(height: 20),
KloktunTextField(
hintText: 'Enter your name',
onChanged: (value) {
print('Input: $value');
},
),
SizedBox(height: 20),
KloktunLoadingIndicator(
size: 50.0,
color: Colors.blue,
),
],
),
),
);
}
}