Flutter文本绘制为Drawable插件flutter_text_drawable的使用

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

Flutter文本绘制为Drawable插件flutter_text_drawable的使用

flutter_text_drawable 是一个用于创建和自定义文本用户头像(如Gmail和联系人中的样式)的Flutter插件。它还提供了一个 TextDrawableListTile 小部件,该小部件围绕材料 ListTile 小部件进行包装,以便在与 ListTile 一起使用 TextDrawable 时提供便捷的控制。

基本用法

只需将 TextDrawable 添加到您的小部件树中即可:

TextDrawable(
  text: "Some Text",
)

处理点击事件(类似Gmail)

TextDrawable 小部件具有接收点击事件并在这段文本和选中标记之间切换的功能。只需要设置 isTappable = true。如果希望在小部件被点击时收到回调,请传递一个接受布尔值的函数给 onTap 属性。

TextDrawable(
  text: "$index",
  isTappable: true,
  onTap: (val) {
    print("$index selected: $val");
  },
  boxShape: BoxShape.rectangle,
  borderRadius: BorderRadius.circular(8),
)

使用 TextDrawableListTile

TextDrawableListTile 需要两个参数进行最小化使用 - drawableText (字符串) 和 title (小部件)。它支持所有材料 ListTile 小部件的参数。当列表项被长按的时候,前导的 TextDrawable 文本会动画变成一个检查图标。当 selected = true 时,长按事件不会有任何效果。

ListView.builder(
  itemCount: 3,
  itemBuilder: (context, index) {
    return TextDrawableListTile(
      drawableText: "$index",
      title: Text("$index"),
    );
  },
)

TextDrawable 属性

属性 类型 描述
text String 您希望显示的文本。仅显示第一个字符。
height double TextDrawable 小部件的高度。
width double TextDrawable 小部件的宽度。默认为48。
backgroundColor Color 小部件的背景颜色。如果没有指定,则会生成随机颜色。
textStyle TextStyle 要显示的文本的 TextStyle。默认 fontSize 是18。color 根据与 backgroundColor 的对比度确定。
boxShape BoxShape 小部件的形状。默认为 BoxShape.circle
borderRadius BorderRadiusGeometry 小部件的边框圆角。仅在 boxShape == BoxShape.rectangle 时指定此属性。
duration Duration 文本和选中标记之间动画的持续时间。默认为当前主题动画持续时间。
isTappable bool 设置为 true 时,您希望小部件识别点击。类似于Gmail应用程序中的典型选择行为。
onTap Function(bool) 当小部件被点击时收到的回调。它发出其当前选定状态。

完整示例代码

下面是一个完整的示例代码,展示了如何使用 TextDrawableTextDrawableListTile

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

void main() {
  runApp(MaterialApp(
    title: 'Flutter Text Drawable Demo',
    theme: ThemeData(primaryColor: Colors.green),
    home: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text('Flutter Text Drawable Demo'),
      ),
      body: Column(
        children: [
          // Using TextDrawable alone
          Expanded(
            child: ListView.builder(
              shrinkWrap: true,
              itemCount: 3,
              itemBuilder: (context, index) {
                return ListTile(
                  leading: TextDrawable(
                    text: "$index",
                    isTappable: true,
                    onTap: (val) {
                      print("$index selected: $val");
                    },
                  ),
                  title: Text("Standalone Item $index"),
                );
              },
            ),
          ),
          SizedBox(height: 50),
          // Using the TextDrawableListTile widget
          Expanded(
            child: ListView.builder(
              shrinkWrap: true,
              itemCount: 3,
              itemBuilder: (context, index) {
                return TextDrawableListTile(
                  drawableText: "$index",
                  title: Text("TextDrawableListTile Item $index"),
                  onTap: null,
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter文本绘制为Drawable插件flutter_text_drawable的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本绘制为Drawable插件flutter_text_drawable的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,flutter_text_drawable 是一个用于在 Flutter 中将文本绘制为可绘制对象(Drawable)的插件。这允许你将文本渲染为图像,并可以用于各种 UI 组件中,比如作为图标或者背景图。

以下是一个如何使用 flutter_text_drawable 插件的示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_text_drawable: ^x.y.z  # 请替换为最新版本号

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

2. 导入插件并使用

接下来,在你的 Dart 文件中导入 flutter_text_drawable 插件并使用它。以下是一个完整的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Text Drawable Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 使用 TextDrawable.builder 构建一个可绘制的文本对象
              Image.memory(
                TextDrawable.builder()
                  .buildDrawable(
                    text: 'A',
                    color: Colors.blue,
                    shape: Shape.ROUND_RECT,
                    width: 100,
                    height: 100,
                    textStyle: TextStyle(
                      fontSize: 40,
                      fontWeight: FontWeight.bold,
                    ),
                    borderColor: Colors.white,
                    borderWidth: 4,
                  )!.toByteData(format: ui.ImageByteFormat.png)!.buffer.asUint8List(),
                scale: 1.0,
              ),
              SizedBox(height: 20),
              // 使用 TextDrawable 直接构建
              Image.memory(
                TextDrawable(
                  text: 'B',
                  color: Colors.red,
                  shape: Shape.CIRCLE,
                  width: 100,
                  height: 100,
                  textStyle: TextStyle(
                    fontSize: 40,
                    color: Colors.white,
                  ),
                ).toByteData(format: ui.ImageByteFormat.png)!.buffer.asUint8List(),
                scale: 1.0,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 依赖导入

    import 'package:flutter_text_drawable/flutter_text_drawable.dart';
    
  2. TextDrawable.builder 使用

    • TextDrawable.builder() 提供了一个构建器模式,用于配置你的可绘制文本对象。
    • buildDrawable 方法返回一个 Drawable 对象,你可以将其转换为图像数据(使用 toByteData 方法)。
  3. TextDrawable 直接使用

    • 直接创建一个 TextDrawable 对象,并配置相关属性。
    • 同样使用 toByteData 方法将其转换为图像数据。
  4. Image.memory 使用

    • Image.memory 用于将字节数据渲染为图像。

注意事项

  • 确保你使用的是最新版本的 flutter_text_drawable 插件,因为 API 可能会随着版本更新而变化。
  • toByteData 方法是一个异步操作,但在这个示例中,为了简化代码,我们直接使用了 ! 操作符来解包 Future 的结果。在实际应用中,你可能需要处理异步操作。

希望这个示例能够帮助你理解如何在 Flutter 中使用 flutter_text_drawable 插件来绘制文本为可绘制对象。

回到顶部