Flutter未知功能插件flutter_star的使用(由于介绍为undefined,故功能为假设性描述)

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

Flutter未知功能插件flutter_star的使用(由于介绍为undefined,故功能为假设性描述)

一、描述

目标: 使用canvas手工打造,一个完美的星星评分组件。

  • StarScore 星星显示组件:

    • 比如显示4.2: 会有5颗星, 前四颗填满,后一刻填充20%
    • StarScore 为 Stateless组件,仅负责显示的需求
  • CustomRating 星星评分组件:

    • 可指定最大值,也就是显示多少个星星
    • 点击时会改变状态,进行评分,支持半星评分
    • 支持评分回调
  • StarWidget组件:

    • 可定义星星的显示进度情况 0% ~ 100 % 无死角
    • 可定义星星的角数
    • 可定义星星的颜色、大小

二、StarScore

分数展示组件

名称 类型 功能 备注 默认
score double 分数 - 0
star Star 见第四点 星星属性配置 Star()
tail Widget 尾部的组件 - null
StarScore(
  score: 4.8,
  star: Star(
      fillColor: Colors.tealAccent,
      emptyColor: Colors.grey.withAlpha(88)),
  tail: Column(
    children: <Widget>[
      Text("综合评分"),
      Text("4.8"),
    ],
  ),
),

StarScore示例


三、CustomRating

评分组件

名称 类型 功能 备注 默认
max int 最大星星数 - 5
score double 分数 - 0
star Star 见第四点 星星属性配置 Star()
onRating Function(double) 点击回调 @required null
1. 最简使用
CustomRating(onRating: (s) {
   print(s);
 }),

CustomRating最简使用

2. 可高度定制
CustomRating(
     max: 6,
     score: 3.0,
     star: Star(
         num: 12,
         fillColor: Colors.orangeAccent,
         fat: 0.6,
         emptyColor: Colors.grey.withAlpha(88)),
    onRating: (s) {
       print(s);
     }),

CustomRating高度定制


四、Star

星星组件 : 高度可定制的配置类

名称 类型 功能 备注 默认
progress double 填充的进度 [0,1] 0.0
num int 星星的角数 大于3 5
fat double 星星的胖瘦 (0,1] 0.5
emptyColor Color 星星的色 - Colors.grey
fillColor Color 星星的填充色 - Colors.yellow
size double 星星的大小 - 20
1. 进度填充: progress

进度填充示例

2. 星星的角数: num

星星的角数示例

3. 星星的胖瘦: fat

星星的胖瘦示例

4. 星星的颜色: fillColoremptyColor

星星的颜色示例


完整示例代码

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center, // 居中对齐
            children: <Widget>[
              StarWidget(
                star: Star(
                    progress: 0.8, 
                    num: 5, 
                    fat: 0.6, 
                    fillColor: Colors.green,
                    size: 30 // 设置星星大小
                ),
              ),
              SizedBox(height: 20), // 添加间距
              _buildStarScore(),
              SizedBox(height: 20), // 添加间距
              _buildCustomRating()
            ],
          ),
        ),
      ),
    );
  }

  Widget _buildStarScore() => StarScore(
    score: 4.8,
    star: Star(
        fillColor: Colors.tealAccent,
        emptyColor: Colors.grey.withAlpha(88),
        size: 25 // 设置星星大小
    ),
    tail: Column(
      children: <Widget>[
        Text("综合评分", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
        Text("4.8", style: TextStyle(fontSize: 24, color: Colors.tealAccent)),
      ],
    ),
  );

  Widget _buildCustomRating() => Column(
    children: <Widget>[
      CustomRating(
        onRating: (s) {
          print('评分: $s');
        },
        star: Star(
          size: 25, // 设置星星大小
        ),
      ),
      SizedBox(height: 20), // 添加间距
      CustomRating(
        max: 6,
        score: 3.0,
        star: Star(
            num: 12,
            fillColor: Colors.orangeAccent,
            fat: 0.6,
            emptyColor: Colors.grey.withAlpha(88),
            size: 25 // 设置星星大小
        ),
        onRating: (s) {
          print('评分: $s');
        },
      ),
    ],
  );
}

更多关于Flutter未知功能插件flutter_star的使用(由于介绍为undefined,故功能为假设性描述)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter未知功能插件flutter_star的使用(由于介绍为undefined,故功能为假设性描述)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter社区中,插件的多样性和更新速度非常快,有时候我们可能会遇到一些文档不够完善或者新发布的插件。对于你提到的flutter_star插件,由于它在你描述中是“undefined”,我们将基于假设性描述来编写一些可能的代码案例。请注意,这些代码案例是基于假设的功能,实际使用时需要根据插件的真实功能进行调整。

假设性描述:flutter_star插件用于管理用户收藏(Stars)

1. 安装插件

首先,确保在pubspec.yaml文件中添加flutter_star插件的依赖(注意:这里的插件名和版本号是假设的,实际使用时需要替换为真实的插件名和版本号):

dependencies:
  flutter:
    sdk: flutter
  flutter_star: ^1.0.0  # 假设的版本号

然后运行flutter pub get来安装插件。

2. 导入插件

在你的Dart文件中导入插件:

import 'package:flutter_star/flutter_star.dart';

3. 初始化插件

假设flutter_star插件需要初始化,可以在应用的入口文件(如main.dart)中进行初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterStar.instance.initialize();
  runApp(MyApp());
}

4. 使用插件功能

4.1 用户登录后获取收藏列表

假设flutter_star插件提供了获取用户收藏列表的功能:

Future<void> fetchUserStars() async {
  try {
    List<StarItem> stars = await FlutterStar.instance.getUserStars();
    // 处理获取到的收藏列表
    print('User Stars: $stars');
  } catch (e) {
    // 处理错误
    print('Error fetching user stars: $e');
  }
}
4.2 添加收藏

假设flutter_star插件提供了添加收藏的功能:

Future<void> addStar(String itemId) async {
  try {
    bool result = await FlutterStar.instance.addStar(itemId: itemId);
    if (result) {
      print('Star added successfully');
    } else {
      print('Failed to add star');
    }
  } catch (e) {
    // 处理错误
    print('Error adding star: $e');
  }
}
4.3 移除收藏

假设flutter_star插件提供了移除收藏的功能:

Future<void> removeStar(String itemId) async {
  try {
    bool result = await FlutterStar.instance.removeStar(itemId: itemId);
    if (result) {
      print('Star removed successfully');
    } else {
      print('Failed to remove star');
    }
  } catch (e) {
    // 处理错误
    print('Error removing star: $e');
  }
}

5. UI展示

在UI层面,你可以使用Flutter的常用组件来展示收藏列表,并提供添加/移除收藏的按钮。以下是一个简单的示例:

import 'package:flutter/material.dart';

class StarListScreen extends StatefulWidget {
  @override
  _StarListScreenState createState() => _StarListScreenState();
}

class _StarListScreenState extends State<StarListScreen> {
  List<StarItem> userStars = [];

  @override
  void initState() {
    super.initState();
    fetchUserStars();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Stars'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Expanded(
              child: ListView.builder(
                itemCount: userStars.length,
                itemBuilder: (context, index) {
                  StarItem star = userStars[index];
                  return ListTile(
                    title: Text(star.title),
                    trailing: Row(
                      mainAxisSize: MainAxisSize.min,
                      children: [
                        IconButton(
                          icon: Icon(Icons.add),
                          onPressed: () => addStar(star.itemId),
                        ),
                        IconButton(
                          icon: Icon(Icons.remove),
                          onPressed: () => removeStar(star.itemId),
                        ),
                      ],
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> fetchUserStars() async {
    // 之前定义的获取用户收藏列表的函数
    List<StarItem> stars = await FlutterStar.instance.getUserStars();
    setState(() {
      userStars = stars;
    });
  }

  Future<void> addStar(String itemId) async {
    // 之前定义的添加收藏的函数
    bool result = await FlutterStar.instance.addStar(itemId: itemId);
    if (result) {
      fetchUserStars(); // 刷新列表
    }
  }

  Future<void> removeStar(String itemId) async {
    // 之前定义的移除收藏的函数
    bool result = await FlutterStar.instance.removeStar(itemId: itemId);
    if (result) {
      fetchUserStars(); // 刷新列表
    }
  }
}

请注意,上述代码案例是基于假设性描述编写的,实际使用时需要根据flutter_star插件的真实API进行调整。如果插件的API与假设不同,你需要参考插件的官方文档或源代码来编写正确的代码。

回到顶部