Flutter自定义UI组件插件shadcn_ui的使用
Flutter自定义UI组件插件shadcn_ui的使用
Flutter ShadcnUI
ShadcnUI移植到Flutter中,提供了一系列完全可定制的Awesome UI组件。
文档
查看文档以与组件交互并查看代码。
进度
关注进度请访问 X (Twitter)
以下是已实现和未实现的功能列表:
- ✅ Accordion
- ✅ Alert
- ❌ Breadcrumb
- ✅ Dialog
- ✅ Avatar
- ✅ Badge
- ✅ Button
- ✅ Calendar
- ✅ Card
- ❌ Carousel
- ✅ Checkbox
- ❌ Collapsible
- ✅ Combobox
- ❌ Command
- ✅ Context Menu
- ❌ Data Table
- ✅ Date Picker
- ❌ Drawer
- ✅ 使用 Context Menu 替代 Dropdown Menu
- ✅ Form
- ✅ 使用 Popover 替代 Hover Card
- ✅ Image
- ✅ Input
- ✅ Input OTP
- ✅ 使用 Text 替代 Label
- ❌ Menubar
- ❌ Navigation Menu
- ❌ Pagination
- ✅ Popover
- ✅ Progress
- ✅ RadioGroup
- ✅ Resizable
- ✅ 使用 SingleScrollView, ListView 等替代 Scroll Area
- ✅ Select
- ✅ 使用 Divider 替代 Separator
- ✅ Sheet
- ❌ Skeleton
- ✅ Slider
- ❌ Sonner (?)
- ✅ Switch
- ✅ Table
- ✅ Tabs
- ❌ TextArea
- ✅ Time Picker
- ✅ Toast
- ❌ Toggle
- ❌ ToggleGroup
- ✅ Tooltip
Star History
示例代码
以下是一个完整的示例demo,展示了如何在Flutter项目中使用shadcn_ui
插件:
import 'package:flutter/material.dart';
import 'package:flutter_solidart/flutter_solidart.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
void main() {
SolidartConfig.devToolsEnabled = false;
runApp(const App());
}
// 定义路由映射
final routes = <String, WidgetBuilder>{
'/accordion': (_) => const AccordionPage(),
'/alert': (_) => const AlertPage(),
// 其他页面...
};
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return Solid(
providers: [
Provider<Signal<ThemeMode>>(create: () => Signal(ThemeMode.light)),
],
builder: (context) {
final themeMode = context.observe<ThemeMode>();
return ShadApp(
debugShowCheckedModeBanner: false,
themeMode: themeMode,
routes: routes,
theme: ShadThemeData(
brightness: Brightness.light,
colorScheme: const ShadZincColorScheme.light(),
),
darkTheme: ShadThemeData(
brightness: Brightness.dark,
colorScheme: const ShadZincColorScheme.dark(),
),
home: const MainPage(),
);
},
);
}
}
class MainPage extends StatefulWidget {
const MainPage({super.key});
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
final search = Signal('');
@override
void dispose() {
search.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: ShadInput(
placeholder: const Text('Search ShadcnUI component'),
onChanged: search.set,
),
),
body: SignalBuilder(
signal: search,
builder: (context, searchString, child) {
final filteredRoutes = {
for (final k in routes.keys.where(
(k) => k.toLowerCase().contains(searchString.toLowerCase())))
k: routes[k]!
};
return ListView.builder(
itemCount: filteredRoutes.length,
itemBuilder: (BuildContext context, int index) {
final route = filteredRoutes.keys.elementAt(index);
final name = route.replaceAllMapped(
RegExp(r'(?:^/|-)([a-zA-Z])'),
(match) => match.group(0)!.substring(1).toUpperCase(),
);
return Material(
child: ListTile(
title: Text(name),
onTap: () {
Navigator.of(context).pushNamed(route);
},
),
);
},
);
},
),
);
}
}
注意事项
SolidartConfig.devToolsEnabled = false;
:禁用开发工具。ShadApp
:使用shadcn_ui
提供的主题配置。SignalBuilder
:用于响应式构建UI,当信号变化时重新构建。Navigator.of(context).pushNamed(route);
:根据用户选择导航到对应的页面。
通过以上步骤,您可以快速集成并使用shadcn_ui
插件来创建美观且功能丰富的Flutter应用程序。
更多关于Flutter自定义UI组件插件shadcn_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义UI组件插件shadcn_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,作为一个IT专家,我可以为你提供一个关于如何在Flutter项目中集成和使用自定义UI组件插件shadcn_ui
的代码示例。假设shadcn_ui
是一个已经发布在pub.dev上的Flutter插件,以下是如何在Flutter项目中集成并使用它的步骤:
1. 添加依赖
首先,在你的Flutter项目的pubspec.yaml
文件中添加shadcn_ui
作为依赖项。确保你使用的是最新版本的插件。
dependencies:
flutter:
sdk: flutter
shadcn_ui: ^最新版本号 # 替换为实际版本号
2. 获取依赖
在命令行中运行以下命令以获取依赖项:
flutter pub get
3. 导入并使用shadcn_ui
现在,你可以在你的Flutter应用中导入并使用shadcn_ui
提供的组件。以下是一个简单的示例,展示如何在一个Dart文件中导入并使用shadcn_ui
的某个自定义组件(假设这个组件名为CustomButton
)。
import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.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 StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('shadcn_ui Demo'),
),
body: Center(
child: CustomButtonExample(),
),
);
}
}
class CustomButtonExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// 使用shadcn_ui提供的CustomButton组件
CustomButton(
onPressed: () {
print('CustomButton clicked!');
},
child: Text('Click Me'),
),
],
);
}
}
注意事项
- 插件文档:务必查阅
shadcn_ui
的官方文档或README文件,以获取关于如何使用各个组件的详细信息和属性说明。 - 示例代码:很多插件会在其GitHub仓库或pub.dev页面上提供示例代码,这可以帮助你更快地理解如何使用该插件。
- 版本兼容性:确保你的Flutter SDK版本与
shadcn_ui
插件兼容。
示例解释
在上述示例中,我们创建了一个简单的Flutter应用,其中包含一个自定义按钮CustomButton
。这个按钮是通过shadcn_ui
插件提供的,点击按钮时会在控制台打印一条消息。
请注意,实际的shadcn_ui
插件可能包含不同的组件和属性,因此你需要根据插件的文档进行调整。上述代码只是一个通用的示例,用于展示如何在Flutter项目中集成和使用自定义UI组件插件。