如何在 flutter 中实现具有自定义颜色的自定义点形 Tab 指示器

How to implement custom dot shaped Tab indicator with custom color in flutter

我想实现点形标签指示器。 (即小圆圈)如下图自定义颜色。

Refer this image

请帮忙解决这个问题。

您可以创建一个单独的小部件,将颜色和半径作为参数来实现此目的。

As Referred from here

indicator 参数需要装饰,所以我们应该创建一个 BoxPainter

import 'package:flutter/material.dart';

class CircleTabIndicator extends Decoration {
 final BoxPainter _painter;

 CircleTabIndicator({@required Color color, @required double radius})
    : _painter = _CirclePainter(color, radius);

 @override
 BoxPainter createBoxPainter([onChanged]) => _painter;
}

class _CirclePainter extends BoxPainter {
 final Paint _paint;
 final double radius;

 _CirclePainter(Color color, this.radius)
    : _paint = Paint()
  ..color = color
  ..isAntiAlias = true;

@override
void paint(Canvas canvas, Offset offset, ImageConfiguration cfg) {
   final Offset circleOffset =
      offset + Offset(cfg.size.width / 2, cfg.size.height - radius - 5);
   canvas.drawCircle(circleOffset, radius, _paint);
 }

}

并用作

 indicator: CircleTabIndicator(color: Colors.white, radius: 3),

如果你想简化你的工作,那么你可以使用this包,并且通过使用这个package你可以自定义选项卡indicator

这里 下面是我在我的一个项目中使用过的例子Code,它会让你达到预期的效果结果带有点 indicator.

请参阅下面代码中的 indicator 部分:-

  buildTabBarContent() {
    return TabBar(
      isScrollable: true,
      labelColor: Colors.black,
      indicator: DotIndicator(
        color: Colors.black,
        distanceFromCenter: 16,
        radius: 3,
        paintingStyle: PaintingStyle.fill,
      ),
      tabs: [
        Tab(
          text: "All",
        ),
        Tab(text: "Football"),
        Tab(
          text: "Tennis",
        ),
        Tab(text: "Basketball"),
        Tab(text: "Cricket"),
        Tab(text: "Cricket"),
        Tab(text: "Cricket"),
      ],
    );
  }