Flutter UI组件库插件tdesign_flutter的使用

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

Flutter UI组件库插件 tdesign_flutter 的使用

TDesign Logo

Tencent TDesign 是一个适用于移动项目的 Flutter UI 组件库。

Features

  • 提供符合 TDesign 设计风格的 Flutter UI 组件库
  • 支持根据应用设计风格自定义主题
  • 提供常用图标库并支持自定义替换
  • 按照 TDesign 规范定义颜色组,可以在 TDColors 中查看,便于组件适应 TDesign 规范
  • 颜色值声明类可以添加默认颜色,并实时查看颜色值的默认显示效果

Notice

  • 主题样式(如颜色、字体大小、字体样式、圆角、阴影等)可以通过 JSON 文件配置。通过 TDTheme.of(context)TDTheme.defaultData() 获取主题数据。建议所有组件使用 TDTheme.of(context),只有不需要跟随本地主题的组件可以使用 TDTheme.defaultData()
  • 颜色、字体、圆角等的使用示例:
TDTheme.of(context).brandNormalColor
TDTheme.defaultData().fontBodyLarge
  • TDesign 的图标不跟随主题,全部为 ttf 格式,使用示例:
Icon(TDIcons.activity)
  • 示例代码位于 example/lib/page/

SDK 依赖版本

  • dart: “>=2.19.0 <4.0.0”
  • flutter: “>=3.7.0”

其他技术栈实现

Feedback

feedback

开源协议

TDesign 采用 MIT LICENSE

致谢

TDesign Flutter 依赖以下组件库,感谢作者的开源贡献:

示例代码

以下是一个完整的示例代码,展示了如何使用 tdesign_flutter 插件:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:tdesign_flutter/src/util/log.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';

import 'base/example_route.dart';
import 'base/intl_resource_delegate.dart';
import 'config.dart';
import 'home.dart';

void main() {
  Log.setCustomLogPrinter((level, tag, msg) => print('[$level] $tag ==>> $msg'));
  runApp(const MyApp());

  SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
    statusBarColor: Colors.transparent,
    systemNavigationBarColor: Colors.transparent,
    systemNavigationBarDividerColor: Colors.transparent,
  ));

  exampleMap.forEach((key, value) {
    value.forEach((model) {
      examplePageList.add(model);
    });
  });
  sideBarExamplePage.forEach(examplePageList.add);
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late TDThemeData _themeData;
  Locale? locale = const Locale('zh');

  @override
  void initState() {
    super.initState();
    _themeData = TDThemeData.defaultData();
  }

  @override
  Widget build(BuildContext context) {
    // 使用多套主题
    TDTheme.needMultiTheme();
    // 适配3.16的字体居中前,先禁用字体居中功能
    // kTextForceVerticalCenterEnable = false;
    var delegate = IntlResourceDelegate(context);
    return MaterialApp(
      title: 'TDesign Flutter Example',
      theme: ThemeData(extensions: [_themeData], colorScheme: ColorScheme.light(primary: _themeData.brandNormalColor)),
      home: PlatformUtil.isWeb ? null : Builder(
        builder: (context) {
          // 设置文案代理,国际化需要在MaterialApp初始化完成之后才生效,而且需要每次更新context
          TDTheme.setResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true);
          return MyHomePage(
            title: AppLocalizations.of(context)?.components ?? '',
            locale: locale,
            onLocaleChange: (locale){
              setState(() {
                this.locale = locale;
              });
            },
            onThemeChange: (themeData) {
              setState(() {
                _themeData = themeData;
              });
            },
          );
        },
      ),
      // 设置国际化处理
      locale: locale,
      supportedLocales: AppLocalizations.supportedLocales,
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      onGenerateRoute: TDExampleRoute.onGenerateRoute,
      routes: _getRoutes(),
    );
  }

  Map<String, WidgetBuilder> _getRoutes() {
    if (PlatformUtil.isWeb) {
      return {for (var model in examplePageList) model.name: (context) => model.pageBuilder.call(context, model)}
        ..putIfAbsent('/', () => (context) => const MyHomePage(title: 'TDesign Flutter 组件库'));
    } else {
      return const {};
    }
  }
}

这个示例代码展示了如何初始化和配置 tdesign_flutter 插件,包括设置日志、系统 UI 样式、主题数据、国际化处理等。希望对你有所帮助!


更多关于Flutter UI组件库插件tdesign_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter UI组件库插件tdesign_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用tdesign_flutter UI组件库插件的示例代码。tdesign_flutter 是一个基于 Tencent Design (TDesign) 规范的 Flutter 组件库,提供了丰富的 UI 组件。

第一步:添加依赖

首先,你需要在 pubspec.yaml 文件中添加 tdesign_flutter 的依赖。

dependencies:
  flutter:
    sdk: flutter
  tdesign_flutter: ^最新版本号  # 请替换为实际的最新版本号

然后运行 flutter pub get 来获取依赖。

第二步:引入并使用组件

接下来,你可以在你的 Flutter 项目中引入并使用 tdesign_flutter 提供的组件。以下是一个简单的示例,展示了如何使用 TButtonTInput 组件。

import 'package:flutter/material.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return TDesignTheme(
      data: TDesignThemeData.light(), // 使用浅色主题,也可以选择使用 .dark()
      child: MaterialApp(
        title: 'TDesign Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TDesign Flutter Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 使用 TButton 组件
            TButton(
              variant: TButtonVariant.primary,
              onPressed: () {
                // 按钮点击事件处理
                print('Button clicked!');
              },
              child: Text('Primary Button'),
            ),
            SizedBox(height: 20),
            // 使用 TInput 组件
            TInput(
              controller: _controller,
              placeholder: '请输入内容',
              clearable: true,
              suffix: IconButton(
                icon: Icon(Icons.clear),
                onPressed: () {
                  _controller.clear();
                },
              ),
            ),
            SizedBox(height: 20),
            // 显示输入内容
            Text(
              '输入内容: ${_controller.text}',
              style: TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

第三步:运行应用

保存上述代码并运行你的 Flutter 应用。你应该能够看到一个包含 TButtonTInput 组件的简单界面。

注意事项

  1. 版本兼容性:确保你使用的 tdesign_flutter 版本与你的 Flutter SDK 版本兼容。
  2. 主题定制TDesignThemeData 提供了丰富的主题定制选项,你可以根据需要进行调整。
  3. 更多组件tdesign_flutter 提供了丰富的组件库,包括对话框、选择器、列表等,你可以查阅官方文档获取更多信息。

希望这个示例能够帮助你快速上手 tdesign_flutter。如果你有任何其他问题,欢迎继续提问!

回到顶部