Vertical Rating Bar
Complete Code For 'Vertical Rating Bar' In Flutter main.dart
import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { var _ratingController = TextEditingController(); double _rating; double _userRating = 3.0; int _ratingBarMode = 1; bool _isRTLMode = false; bool _isVertical = false; IconData _selectedIcon; @override void initState() { _ratingController.text = "3.0"; super.initState(); } @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.amber, appBarTheme: AppBarTheme( textTheme: TextTheme( title: Theme.of(context).textTheme.title.copyWith( color: Colors.white, ), ), ), ), home: Builder( builder: (context) => Scaffold( appBar: AppBar( backgroundColor: Colors.blue[800], title: Text('Vertical Rating Bar'), ), body: Directionality( textDirection: _isRTLMode ? TextDirection.rtl : TextDirection.ltr, child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: <Widget>[ SizedBox( height: 40.0, ), _heading('Rating Bar'), _ratingBar(_ratingBarMode), SizedBox( height: 20.0, ), _rating != null ? Text( "Rating: $_rating", style: TextStyle(fontWeight: FontWeight.bold), ) : Container(), Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Switch to Vertical Bar', style: TextStyle( fontWeight: FontWeight.w300, ), ), Switch( value: _isVertical, onChanged: (value) { setState(() { _isVertical = value; }); }, activeColor: Colors.blue[800], ), ], ), ], ), ), ), ), ), ); } Widget _ratingBar(int mode) { switch (mode) { case 1: return RatingBar( initialRating: 2, minRating: 1, direction: _isVertical ? Axis.vertical : Axis.horizontal, allowHalfRating: true, unratedColor: Colors.amber.withAlpha(50), itemCount: 7, itemSize: 50.0, itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemBuilder: (context, _) => Icon( _selectedIcon ?? Icons.star, color: Colors.blue[900], ), onRatingUpdate: (rating) { setState(() { _rating = rating; }); }, ); case 3: return RatingBar( initialRating: 4.7, direction: _isVertical ? Axis.vertical : Axis.horizontal, itemCount: 7, itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemBuilder: (context, index) { switch (index) { case 0: return Icon( Icons.sentiment_very_dissatisfied, color: Colors.indigo, ); case 1: return Icon( Icons.sentiment_dissatisfied, color: Colors.orange, ); case 2: return Icon( Icons.sentiment_neutral, color: Colors.red, ); case 3: return Icon( Icons.sentiment_satisfied, color: Colors.blue, ); case 4: return Icon( Icons.sentiment_satisfied_outlined, color: Colors.green, ); case 5: return Icon( Icons.sentiment_very_satisfied, color: Colors.amber, ); case 6: return Icon( Icons.sentiment_very_satisfied_sharp, color: Colors.lightGreen, ); default: return Container(); } }, onRatingUpdate: (rating) { setState(() { _rating = rating; }); }, ); default: return Container(); } } Widget _heading(String text) => Column( children: [ Text( text, style: TextStyle( fontWeight: FontWeight.w300, fontSize: 24.0, ), ), SizedBox( height: 20.0, ), ], ); }