Flutter功能未定义插件f_kit的潜在用途探索
Flutter功能未定义插件f_kit的潜在用途探索
f_kit
flutter开发工具包
功能
db
FDb
基于sqflite的简单封装
- 初始化
- 批量执行
- 基于sql语句的增删改查
utils
FTime
时间的工具类
-
时间转换:
- x年x月x日
ts2chinese - yyyy-MM-dd
ts2line - yyyy/MM/dd
ts2italic
- x年x月x日
-
时间比较:
- n天前,n小时前,刚刚
getDiff - 相差的天数
getDaysBetween - 是否是同一天
isSameDay
- n天前,n小时前,刚刚
FkToast
toast
- 两种方式:
- 无需context,但是样式无法自己定制,只有少数参数可以修改
- 需要context,可以自己定制样式
FRandom
产生随机数的工具类
- uuid方式
- 标准随机数方式
FShare
分享的工具类
- 手机原生分享
share
widget
FText
基于baseFontSize预置4种字体大小的Text组件
- 可以配置:
- 字体尺寸
baseFontSize - 是否可换行
baseSoftWrap
- 字体尺寸
FBtn
图片文字按钮
- 可以配置:
- 按钮图片背景
baseBtnImg - 按钮文字样式
baseTs - 按钮颜色背景
baseBgColor
- 按钮图片背景
FBtnIcon
图标按钮
- 不传
onTap即为无需点击的图标
FDialogTip
固定样式的提示弹窗
FDialogConfirm
固定样式的确认弹窗
FDialogMenu
基于按钮位置的弹出框
- 使用前需要定义
final GlobalKey k = GlobalKey(); - 然后给定位的按钮传入
k,以及showMenu时传入k - 弹出的位置是在定位按钮的左下角开始
- 修改参数
offsetHeight可以调整弹出位置的高度
FLoading
固定样式的按钮处的弹出框
- 两种使用方式:
- 弹窗方式:会产生一个更高层的dialog堆栈,但是获得dialog特性,比如返回键可以取消,同理取消loading需要pop
- 直接使用方式:相比弹窗,不会对页面的堆栈产生影响,纯粹是widget层次的改变,但是取消需要setState
完整示例代码
import 'package:f_kit/db/f_db.dart';
import 'package:f_kit/f_kit.dart';
import 'package:f_kit/utils/f_share.dart';
import 'package:f_kit/utils/f_time.dart';
import 'package:f_kit/widget/f_text.dart';
import 'package:f_kit/widget/f_btn.dart';
import 'package:f_kit/widget/f_dialog_tip.dart';
import 'package:f_kit/widget/f_loading.dart';
import 'package:f_kit/widget/f_dialog_confirm.dart';
import 'package:f_kit/widget/f_dialog_menu.dart';
import 'package:f_kit/utils/fk_toast.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
void aa() {
FKit();
print("--${FTime.ts2line(DateTime.now().millisecondsSinceEpoch)}");
}
[@override](/user/override)
Widget build(BuildContext context) {
aa();
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: NewWidget(),
),
);
}
}
class NewWidget extends StatefulWidget {
const NewWidget({
super.key,
});
[@override](/user/override)
State<NewWidget> createState() => _NewWidgetState();
}
class _NewWidgetState extends State<NewWidget> {
bool isLoading = false;
[@override](/user/override)
Widget build(BuildContext context) {
final GlobalKey k = GlobalKey();
return FLoading(
isLoading: isLoading,
child: Column(
children: [
Text('Running'),
TextButton(
onPressed: () {
FShare.share(context, "text");
},
child: Text('c1')),
FText.base("content"),
FText.base_2("content"),
FText.base_4("content"),
FText.base_6("content"),
FBtn("data", onTap: () {
FDialogTip.show(context, "content");
}),
FBtn("confirm", onTap: () {
FDialogConfirm.show(context, "content");
}),
FBtn(key: k, "menu", onTap: () {
FDialogMenu.showMenu(
context,
k,
const SizedBox(
width: 50,
height: 100,
child: Text("data"),
));
}),
FBtn("loading1", onTap: () {
setState(() {
isLoading = true;
});
}),
FBtn("loading2", onTap: () {
FLoading.show(context);
}),
FBtn("toast1", onTap: () {
FkToast.show("msg");
}),
FBtn("toast2", onTap: () {
FkToast.showCustomToast(context, Text("data"));
}),
FBtn("test", onTap: () async {
int a = 0;
a = await getaaa().catchError((e) {
print('test: $e');
return 11;
}).whenComplete(() {
print('test: complete $a');
}).timeout(const Duration(seconds: 10), onTimeout: () {
print('test: timeout');
return 10;
});
print(a);
}),
FBtn("db", onTap: () {
FDb().rawDelete('DELETE FROM Test WHERE name = ?', ['zhang']).then(
(value) {
if (value == -1) {
print('rawDelete error');
}
print('rawDelete $value');
});
FDb().rawInsert(
'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
['zhang', 12345678, 3.1416]).then((value) {
if (value == -1) {
print('rawInsert error');
}
print('rawInsert $value');
});
FDb().rawUpdate(
'UPDATE Test SET name = ?, value = ? WHERE name = ?',
['song', '9876', 'zhang']).then((value) {
if (value == -1) {
print('rawUpdate error');
}
print('rawUpdate $value');
});
FDb().rawQuery('SELECT * FROM Test WHERE name = ?', ['zhang']).then(
(value) {
print('rawQuery $value');
});
}),
],
),
);
}
Future<int> getaaa() async {
await Future.delayed(const Duration(seconds: 15), () {
// 延迟
});
// throw Exception();
return 1;
}
Future<int> getbbb() async {
await Future.delayed(const Duration(seconds: 15), () {
// 延迟
});
return 2;
}
}
更多关于Flutter功能未定义插件f_kit的潜在用途探索的实战教程也可以访问 https://www.itying.com/category-92-b0.html

