Flutter自定义UI组件插件shadcn_ui的使用

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

Flutter自定义UI组件插件shadcn_ui的使用

Flutter ShadcnUI

License: MIT GitHub stars GitHub issues GitHub pull-requests shadcn_ui Pub Version (including pre-releases)

ShadcnUI移植到Flutter中,提供了一系列完全可定制的Awesome UI组件。

文档

查看文档以与组件交互并查看代码。

进度

关注进度请访问 X (Twitter)

以下是已实现和未实现的功能列表:

Star History

Star History Chart

示例代码

以下是一个完整的示例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

1 回复

更多关于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'),
        ),
      ],
    );
  }
}

注意事项

  1. 插件文档:务必查阅shadcn_ui的官方文档或README文件,以获取关于如何使用各个组件的详细信息和属性说明。
  2. 示例代码:很多插件会在其GitHub仓库或pub.dev页面上提供示例代码,这可以帮助你更快地理解如何使用该插件。
  3. 版本兼容性:确保你的Flutter SDK版本与shadcn_ui插件兼容。

示例解释

在上述示例中,我们创建了一个简单的Flutter应用,其中包含一个自定义按钮CustomButton。这个按钮是通过shadcn_ui插件提供的,点击按钮时会在控制台打印一条消息。

请注意,实际的shadcn_ui插件可能包含不同的组件和属性,因此你需要根据插件的文档进行调整。上述代码只是一个通用的示例,用于展示如何在Flutter项目中集成和使用自定义UI组件插件。

回到顶部