Flutter 如何将评级从字符串更改为星级?

问题描述

所以我正在使用 themoviedb.org API 制作一个电影应用程序,我设法调用了评分,但我得到的是一个 idk,它被称为可能是一个数字,我想更改这个数字或将此数字转换为一颗星,5 如果我可以的话(有 8,8 评级仅供参考)并知道如何

代码如下:

Chip(
     backgroundColor: Style.Colors.secondColor,label: Text(
     'rating: ' + movies[index].rating.toString(),style: TextStyle(fontFamily: 'Raleway'),),

这里是完整的代码,以防您需要它:

import 'package:Flutter/material.dart';

import 'package:movie_app_3/bloc/get_movies_bloc.dart';
import 'package:movie_app_3/model/movie.dart';
import 'package:movie_app_3/model/movie_response.dart';
import 'package:movie_app_3/screens/movie_detail_screen/movie_detail_screen.dart';
import 'package:movie_app_3/style/theme.dart' as Style;

class TopMovies extends StatefulWidget {
  @override
  _TopMoviesstate createState() => _TopMoviesstate();
}

class _TopMoviesstate extends State<TopMovies> {
  void initState() {
    super.initState();
    moviesBloc..getMovies();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
        Padding(
          padding: const EdgeInsets.only(top: 8.0),child: Divider(
            color: Style.Colors.thirdColor,indent: MediaQuery.of(context).size.width * 0.45,endindent: MediaQuery.of(context).size.width * 0.45,thickness: 5,Padding(
          padding: const EdgeInsets.only(left: 20.0,top: 10.0),child: Text(
            "Top Movies",style: TextStyle(
                color: Colors.black,fontWeight: FontWeight.w500,fontFamily: 'Poppins',fontSize: 17.0),Divider(
          color: Colors.black,indent: 22,endindent: MediaQuery.of(context).size.width * 0.8,thickness: 1,SizedBox(
          height: 5.0,StreamBuilder<MovieResponse>(
          stream: moviesBloc.subject.stream,builder: (context,AsyncSnapshot<MovieResponse> snapshot) {
            if (snapshot.hasData) {
              if (snapshot.data.error != null &&
                  snapshot.data.error.length > 0) {
                return _buildErrorWidget(snapshot.data.error);
              }
              return _buildHomeWidget(snapshot.data);
            } else if (snapshot.hasError) {
              return _buildErrorWidget(snapshot.error);
            } else {
              return _buildLoadingWidget();
            }
          },)
      ],);
  }

  Widget _buildLoadingWidget() {
    return Center(
        child: Column(
      mainAxisAlignment: MainAxisAlignment.center,children: [
        SizedBox(
          height: 25.0,width: 25.0,child: CircularProgressIndicator(
            valueColor: new AlwaysstoppedAnimation<Color>(Colors.white),strokeWidth: 4.0,));
  }

  Widget _buildErrorWidget(String error) {
    return Center(
        child: Column(
      mainAxisAlignment: MainAxisAlignment.center,children: [
        Text("Error occured: $error"),],));
  }

  Widget _buildHomeWidget(MovieResponse data) {
    List<Movie> movies = data.movies;
    if (movies.length == 0) {
      return Container(
        width: MediaQuery.of(context).size.width,child: Column(
          mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
            Column(
              children: <Widget>[
                Text(
                  "No More Movies",style: TextStyle(color: Colors.black45),)
              ],)
          ],);
    } else
      return Container(
        height: MediaQuery.of(context).size.height * 0.695,padding: EdgeInsets.only(left: 10.0),child: ListView.builder(
          scrollDirection: Axis.vertical,itemCount: movies.length,itemBuilder: (context,index) {
            return Padding(
              padding: EdgeInsets.only(top: 10.0,bottom: 10.0,right: 15.0),child: GestureDetector(
                onTap: () {
                  Navigator.push(
                    context,MaterialPageRoute(
                      builder: (context) =>
                          MovieDetailScreen(movie: movies[index]),);
                },child: Card(
                  shape: RoundedRectangleBorder(
                    side: BorderSide(color: Colors.black,width: 1),borderRadius: BorderRadius.all(Radius.circular(20.0)),child: Row(
                    crossAxisAlignment: CrossAxisAlignment.start,children: [
                      Hero(
                        tag: movies[index].id,child: Container(
                            width: 120.0,height: 190.0,decoration: new Boxdecoration(
                              borderRadius: BorderRadius.only(
                                topLeft: Radius.circular(20),bottomLeft: Radius.circular(20),bottomright: Radius.circular(40),shape: BoxShape.rectangle,image: new decorationImage(
                                  fit: BoxFit.cover,image: NetworkImage(
                                      "https://image.tmdb.org/t/p/w200/" +
                                          movies[index].poster)),)),SizedBox(
                        width: 40,Container(
                        width: MediaQuery.of(context).size.width * 0.45,child: Column(
                          children: [
                            SizedBox(
                              height: 20,Text(
                              movies[index].title,maxLines: 3,style: TextStyle(
                                  height: 1.4,color: Style.Colors.subtitleColor,fontWeight: FontWeight.bold,fontSize: 15.0),SizedBox(
                              height: 10,Chip(
                              backgroundColor: Style.Colors.secondColor,label: Text(
                                'rating: ' + movies[index].rating.toString(),Text(
                              movies[index].overview,overflow: TextOverflow.fade,textAlign: TextAlign.justify,fontFamily: 'Raleway',fontSize: 11.0),SizedBox(
                              height: 20,)
                    ],);
          },);
  }
}

解决方法

为什么不使用 https://pub.dev/packages/flutter_rating_bar

突出特点

  • 设置最低和最高评级
  • 任何小部件都可以用作评分栏/指标项
  • 可以在每个位置的相同评分栏中使用不同的小部件
  • 支持垂直布局
  • 在互动中发光
  • 支持 RTL 模式

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...