import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'test.com', debugShowCheckedModeBanner: false, home: HomePage(), ); } } class HomePage extends StatefulWidget { @override State<StatefulWidget> createState() { return _HomePageState(); } } class _HomePageState extends State<HomePage> { double _value = 0; bool _working = false; void startWorking() async { this.setState(() { this._working = true; this._value = 0; }); for(int i = 0; i< 10; i++) { if(!this._working) { break; } await Future.delayed(Duration(seconds: 1)); this.setState(() { this._value += 0.1; }); } this.setState(() { this._working = false; }); } void stopWorking() { this.setState(() { this._working = false; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter LinearProgressIndicator Example'), ), body: Center( child: Column ( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( width: 250, height: 20, child: LinearProgressIndicator( value: this._value, backgroundColor: Colors.cyan[100], valueColor: new AlwaysStoppedAnimation<Color>(Colors.green), ), ), SizedBox(width:10, height: 10), Text( "Percent: " + (this._value * 100).round().toString()+ "%", style: TextStyle(fontSize: 20), ), ElevatedButton( child: Text("Start"), onPressed: this._working? null: () { this.startWorking(); } ), ElevatedButton( child: Text("Stop"), onPressed: !this._working? null: () { this.stopWorking(); } ) ] ) ), ); } }
LinearProgressIndicator
It takes a value from 0 to 1 where 0 indicates start of task and 1 indicates completion of task
Container( alignment: Alignment.topCenter, margin: EdgeInsets.all(20), child: LinearProgressIndicator( value: 0.7, ) )
DEMO
import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Learning', theme: ThemeData( primarySwatch: Colors.green, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() { return _MyHomePageState(); } } class _MyHomePageState extends State<MyHomePage> { double value = 0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Flutter Linear Progress Indicator"), ), body: Container( alignment: Alignment.topCenter, margin: EdgeInsets.only(top: 20), child: Column( children:[ Container( child: Text("Indeterminate Progress Indicator",style: TextStyle(fontSize: 18),), margin: EdgeInsets.all(20), ), Container( margin: EdgeInsets.all(20), child: LinearProgressIndicator( backgroundColor: Colors.grey, color: Colors.purple, minHeight: 5, ), ), Container( child: Text("Determinate Progress Indicator",style: TextStyle(fontSize: 18)), margin: EdgeInsets.all(20), ), Container( margin: EdgeInsets.all(20), child: LinearProgressIndicator( backgroundColor: Colors.grey, color: Colors.green, minHeight: 5, value: value, ), ), Container( margin: EdgeInsets.all(20), child: ElevatedButton( child: Text("Download File"), style: ElevatedButton.styleFrom( onPrimary: Colors.white, primary: Colors.green ), onPressed: () { value = 0; downloadData(); setState(() { }); }, ), ) ] ) ) ); } void downloadData(){ new Timer.periodic( Duration(seconds: 1), (Timer timer){ setState(() { if(value == 1) { timer.cancel(); } else { value = value + 0.1; } }); } ); } }