Flutter核心功能扩展插件infobits_core的使用
Flutter核心功能扩展插件infobits_core的使用
本包包含了由infobits.io使用的组件。
TODO
- 为所有代码添加测试
- 添加infobits图标
- 修复日期时间输入(时间输入部分)
- 更新电话输入
- 创建数字输入
示例代码
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:infobits_core/infobits_core.dart';
void main() {
Timer.periodic(const Duration(seconds: 1), (timer) {
InfobitsState.instance.initialized = true;
timer.cancel();
});
runApp(MyApp());
}
class MyApp extends StatelessWidget {
MyApp({super.key});
final router = GoRouter(routes: [
GoRoute(
path: '/',
builder: (context, state) => const HomePage(),
),
]);
// 这个小部件是你的应用的根。
[@override](/user/override)
Widget build(BuildContext context) {
return InfobitsApp(
title: "Infobits Core 示例",
logo: const CircularProgressIndicator(),
router: router,
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
late final DropdownInputController themeController;
[@override](/user/override)
void initState() {
themeController = DropdownInputController(
defaultValue: 'system', initValue: context.chosenThemeName);
themeController.addListener(_onThemeChanged);
super.initState();
}
[@override](/user/override)
void dispose() {
themeController.removeListener(_onThemeChanged);
super.dispose();
}
void _onThemeChanged() {
debugPrint("新主题值: ${themeController.value}");
context.setThemeName(themeController.value);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Center(
child: Container(
padding: const EdgeInsets.all(20),
constraints: const BoxConstraints(maxWidth: 850),
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Row(
children: [
const Expanded(child: T18("主题")),
SizedBox(
width: 200,
child: DropdownInput(
controller: themeController,
items: const [
DropdownInputItem(
value: "system",
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
T16("系统"),
T14("默认"),
],
)),
DropdownInputItem(
value: "light", child: T16("浅色")),
DropdownInputItem(
value: "dark", child: T16("深色")),
],
defaultValue: "system",
),
)
],
),
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 10),
child: Column(
children: [
H72("H72 最大文本"),
H56("H56 大文本"),
H40("H40 文本"),
H32("H32 文本"),
T24("T24 文本"),
T20("T20 文本"),
T18("T18 文本"),
T16("T16 文本"),
T14("T14 文本"),
T12("T12 文本"),
T10("T10 文本"),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Link(
onPressed: () {},
text: "链接",
),
Link(
onPressed: () {},
text: "链接",
appearance: LinkAppearance.accent,
),
Link(
onPressed: () {},
text: "链接",
appearance: LinkAppearance.neutral,
),
Link(
onPressed: () {},
text: "链接",
color: Colors.red,
),
Link(
onPressed: () {},
text: "链接",
color: Colors.red,
appearance: LinkAppearance.accent,
),
Link(
onPressed: () {},
text: "链接",
color: Colors.red,
appearance: LinkAppearance.neutral,
),
Link(
onPressed: () {},
text: "链接",
disabled: true,
),
Link(
onPressed: () {},
text: "链接",
disabled: true,
appearance: LinkAppearance.accent,
),
Link(
onPressed: () {},
text: "链接",
disabled: true,
appearance: LinkAppearance.neutral,
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Link(
onPressed: () {},
text: "链接",
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
appearance: LinkAppearance.accent,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
appearance: LinkAppearance.neutral,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
color: Colors.red,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
color: Colors.red,
appearance: LinkAppearance.accent,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
color: Colors.red,
appearance: LinkAppearance.neutral,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
disabled: true,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
disabled: true,
appearance: LinkAppearance.accent,
size: const LinkSize.large(),
),
Link(
onPressed: () {},
text: "链接",
disabled: true,
appearance: LinkAppearance.neutral,
size: const LinkSize.large(),
),
],
),
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Button(
text: "按钮",
),
Button(
icon: Icons.add,
text: "按钮",
),
Button(
icon: Icons.add,
text: "按钮",
isIconSurfix: true,
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Button(
onPressed: () {},
text: "按钮",
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.accent,
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.muted,
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.ghost,
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.neutral,
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.danger,
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.warning,
size: const ButtonSize.small(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.success,
size: const ButtonSize.small(),
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Button(
onPressed: () {},
text: "按钮",
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.accent,
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.muted,
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.ghost,
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.neutral,
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.danger,
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.warning,
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.success,
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Button(
onPressed: () {},
text: "按钮",
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.accent,
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.muted,
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.ghost,
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.neutral,
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.danger,
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.warning,
size: const ButtonSize.large(),
),
Button(
onPressed: () {},
text: "按钮",
appearance: ButtonAppearance.success,
size: const ButtonSize.large(),
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Column(
children: [
TextInput(
controller: TextEditingController(),
title: "文本输入",
),
EmailInput(
controller: TextEditingController(),
),
PhoneInput(
controller: TextEditingController(),
),
PasswordInput(
controller: TextEditingController(),
),
CheckboxInput(
title: "复选框",
items: const [
CheckBoxItem(
value: true,
widget: T14("复选框 1"),
),
CheckBoxItem(
value: false,
widget: T14("复选框 2"),
),
],
controller: CheckBoxInputController(),
),
DateTimeInput(
controller: DateTimeInputController(),
),
],
),
),
const CircularProgressIndicator(),
const DateInput(
size: DateInputSize.medium,
),
],
),
),
),
),
);
}
}
更多关于Flutter核心功能扩展插件infobits_core的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter核心功能扩展插件infobits_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用infobits_core
插件的示例代码。infobits_core
是一个假设的Flutter核心功能扩展插件,由于这是一个假设的插件,具体功能和API可能会有所不同,但以下代码将展示如何集成和使用一个类似功能的插件。
首先,确保你的Flutter环境已经设置好,并且你的项目已经创建。然后,在pubspec.yaml
文件中添加infobits_core
插件的依赖(请注意,这里infobits_core
是一个假设的包名,你需要替换为实际存在的包名):
dependencies:
flutter:
sdk: flutter
infobits_core: ^latest_version # 替换为实际插件的版本号
运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下方式使用infobits_core
插件。假设这个插件提供了一些核心功能,比如设备信息获取、网络状态监听等。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:infobits_core/infobits_core.dart'; // 假设的包导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String deviceInfo = '';
String connectivityStatus = '';
@override
void initState() {
super.initState();
// 获取设备信息
_getDeviceInfo();
// 监听网络状态变化
InfoBitsCore.connectivity.addListener(() {
setState(() {
connectivityStatus = InfoBitsCore.connectivity.value ?? 'Unknown';
});
});
}
Future<void> _getDeviceInfo() async {
try {
DeviceInfo deviceInfoData = await InfoBitsCore.deviceInfo.get();
setState(() {
deviceInfo = 'Brand: ${deviceInfoData.brand}\n'
'Model: ${deviceInfoData.model}\n'
'OS Version: ${deviceInfoData.osVersion}';
});
} catch (e) {
print('Error getting device info: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Infobits Core Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Device Info:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
SizedBox(height: 8),
Text(deviceInfo, style: TextStyle(fontSize: 16)),
SizedBox(height: 24),
Text('Connectivity Status:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
SizedBox(height: 8),
Text(connectivityStatus, style: TextStyle(fontSize: 16)),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 在
pubspec.yaml
中添加了infobits_core
依赖。 - 在
MyApp
类中,我们定义了两个字符串变量deviceInfo
和connectivityStatus
来存储设备信息和网络状态。 - 在
initState
方法中,我们调用_getDeviceInfo
方法来获取设备信息,并设置了一个监听器来监听网络状态的变化。 _getDeviceInfo
方法是一个异步方法,它调用InfoBitsCore.deviceInfo.get()
来获取设备信息,并将结果存储在deviceInfo
变量中。- 在
build
方法中,我们构建了一个简单的UI来显示设备信息和网络状态。
请注意,由于infobits_core
是一个假设的插件,上述代码中的API调用(如InfoBitsCore.deviceInfo.get()
和InfoBitsCore.connectivity.addListener()
)可能需要根据实际插件的API进行调整。在实际使用中,你应该参考插件的官方文档来获取正确的API调用方式。