Flutter评分插件custom_rating_bar的使用

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

Flutter评分插件custom_rating_bar的使用

custom_rating_bar 是一个Flutter插件,用于创建自定义评分条。它支持自定义图标、半星显示、方向和对齐等特性。

快速开始

使用方法

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

dependencies:
  custom_rating_bar: ^latest_version # 替换为最新版本号

然后运行 flutter pub get 来安装这个包。

接下来在你的Dart代码中导入此库:

import 'package:custom_rating_bar/custom_rating_bar.dart';

基础用法

这是一个简单的评分条的例子:

RatingBar(
  filledIcon: Icons.star, // 已选中的星星图标
  emptyIcon: Icons.star_border, // 未选中的星星图标
  onRatingChanged: (value) => debugPrint('$value'), // 当用户改变评分时触发
  initialRating: 3, // 初始评分值
  maxRating: 5, // 最大评分值
)

如果你想要一个只读的评分条(例如用来展示),可以这样使用:

RatingBar.readOnly(
  filledIcon: Icons.star, 
  emptyIcon: Icons.star_border,
  initialRating: 4,
  maxRating: 5,
)

示例代码

以下是一个完整的示例应用,展示了如何配置不同的选项来创建多样化的评分条:

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

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

class _MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Custom Rating Bar Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const ExamplePage(),
    );
  }
}

class ExamplePage extends StatelessWidget {
  const ExamplePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: ListView(
        padding: const EdgeInsets.all(16).copyWith(top: MediaQuery.of(context).padding.top + 16),
        children: [
          _buildDivider('Half icons'),
          RatingBar(
            filledIcon: Icons.star,
            emptyIcon: Icons.star_border,
            onRatingChanged: (value) => debugPrint('$value'),
            initialRating: 3,
            alignment: Alignment.center,
          ),
          const SizedBox(height: 16),
          _buildDivider('Custom colors'),
          const RatingBar.readOnly(
            isHalfAllowed: true,
            alignment: Alignment.center,
            filledIcon: Icons.star,
            emptyIcon: Icons.star_border,
            emptyColor: Colors.redAccent,
            filledColor: Colors.greenAccent,
            halfFilledColor: Colors.amberAccent,
            halfFilledIcon: Icons.star_half,
            initialRating: 3.5,
            maxRating: 7,
          ),
          const SizedBox(height: 16),
          _buildDivider('Custom icons'),
          const RatingBar.readOnly(
            isHalfAllowed: true,
            alignment: Alignment.center,
            filledIcon: Icons.wb_sunny,
            halfFilledIcon: Icons.wb_cloudy,
            emptyIcon: Icons.ac_unit,
            emptyColor: Colors.blue,
            halfFilledColor: Colors.grey,
            initialRating: 4,
          ),
          const SizedBox(height: 16),
          _buildDivider('Vertical'),
          const RatingBar.readOnly(
            direction: Axis.vertical,
            isHalfAllowed: true,
            alignment: Alignment.center,
            filledIcon: Icons.star,
            emptyIcon: Icons.star_border,
            initialRating: 2,
            maxRating: 3,
            halfFilledIcon: Icons.star_half,
          ),
          const SizedBox(height: 16),
          _buildDivider('Aligned left'),
          const RatingBar.readOnly(
            isHalfAllowed: true,
            filledIcon: Icons.face,
            filledColor: Colors.greenAccent,
            halfFilledColor: Colors.amberAccent,
            emptyIcon: Icons.face,
            initialRating: 3.5,
            halfFilledIcon: Icons.face,
          ),
          const SizedBox(height: 16),
          _buildDivider('Aligned right'),
          const RatingBar.readOnly(
            isHalfAllowed: true,
            alignment: Alignment.centerRight,
            filledIcon: Icons.star,
            emptyIcon: Icons.star_border,
            filledColor: Colors.greenAccent,
            halfFilledColor: Colors.greenAccent,
            initialRating: 3.5,
            halfFilledIcon: Icons.star_half,
          ),
        ],
      ),
    );
  }

  Widget _buildDivider(String text) => Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          Flexible(
            child: Divider(
              color: Colors.grey[400],
              height: 48,
              thickness: 1,
            ),
          ),
          const SizedBox(width: 8),
          Text(
            text,
            style: TextStyle(
              color: Colors.grey[500],
              fontSize: 20,
              fontWeight: FontWeight.w300,
            ),
          ),
          const SizedBox(width: 8),
          Flexible(
            child: Divider(
              color: Colors.grey[350],
              height: 32,
              thickness: 1,
            ),
          ),
        ],
      );
}

以上代码展示了如何使用custom_rating_bar创建不同风格的评分条,包括半星、自定义颜色、自定义图标、垂直排列以及不同的对齐方式。你可以根据自己的需求调整这些属性以适应应用程序的设计。


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用custom_rating_bar插件的代码示例。custom_rating_bar是一个流行的Flutter插件,用于在应用中显示和处理评分条。

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

dependencies:
  flutter:
    sdk: flutter
  custom_rating_bar: ^0.4.0  # 请检查最新版本号并替换

然后,运行flutter pub get来安装依赖项。

接下来,你可以在你的Flutter应用中使用CustomRatingBar。以下是一个完整的示例,包括如何显示评分条和处理评分更改事件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Rating Bar Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RatingBarScreen(),
    );
  }
}

class RatingBarScreen extends StatefulWidget {
  @override
  _RatingBarScreenState createState() => _RatingBarScreenState();
}

class _RatingBarScreenState extends State<RatingBarScreen> {
  double rating = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Rating Bar Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Your Rating:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 16),
            CustomRatingBar(
              rating: rating,
              size: 30,
              itemCount: 5,
              itemBuilder: (context, index) => Icon(
                Icons.star,
                color: Colors.amber,
              ),
              onRatingChange: (rating) {
                setState(() {
                  this.rating = rating;
                });
              },
            ),
            SizedBox(height: 16),
            Text(
              'Selected Rating: $rating',
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明

  1. 依赖项:在pubspec.yaml文件中添加custom_rating_bar依赖项。
  2. 应用入口MyApp是应用的入口,它使用MaterialApp并设置homeRatingBarScreen
  3. 评分条屏幕RatingBarScreen是一个有状态的Widget,它包含一个评分条和显示当前评分的文本。
  4. 评分条CustomRatingBar用于显示评分条。它的主要属性包括:
    • rating:当前的评分。
    • size:每个评分项的大小。
    • itemCount:评分项的数量。
    • itemBuilder:用于构建每个评分项的Widget。
    • onRatingChange:当评分改变时调用的回调函数。

这个示例展示了如何使用custom_rating_bar插件来显示一个评分条,并处理评分变化事件。你可以根据需要进一步自定义评分条的外观和行为。

回到顶部