hello Guys how are you all? Hope you all are fine. Today in this tutorial we are going to learn How to Work With Progress Indicator In Flutter? so without wasting your time let’s start this article.
How to Work With Progress Indicator In Flutter?
- A lazy way to do it can be using a modal. Which will block the user input, thus preventing any unwanted actions. This would require very little change to your code. Just modifying your
_onLoading
to something like this : - The most ideal way to do it is using
FutureBuilder
and a stateful widget. Which is what you started. The trick is that, instead of having aboolean loading = false
in your state, you can directly use aFuture<MyUser> user
- And then pass it as argument to
FutureBuilder
, which will give you some info such as “hasData” or the instance ofMyUser
when completed. - This would lead to something like this :
Complete Source Code
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'FlutterCorner',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
debugShowCheckedModeBanner: false,
home: new MyHomePage(title: 'Progress Indicator - FlutterCorner.com'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _loading = false;
void _onLoading() {
setState(() {
_loading = true;
new Future.delayed(new Duration(seconds: 3), _login);
});
}
Future _login() async {
setState(() {
_loading = false;
});
}
@override
Widget build(BuildContext context) {
var body = Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
GestureDetector(
onTap: _onLoading,
child: ClipRRect(
borderRadius: BorderRadius.circular(20.0),
child: Container(
height: 70,
width: 250,
color: Colors.black,
child: Center(
child: Text(
"Show Progress Indicator",
style: TextStyle(
color: Colors.white,
fontSize: 20,
),
),
),
),
),
),
],
),
);
var bodyProgress = new Container(
child: new Stack(
children: <Widget>[
body,
new Container(
alignment: AlignmentDirectional.center,
decoration: new BoxDecoration(
color: Colors.white70,
),
child: new Container(
decoration: new BoxDecoration(
color: Colors.black87,
borderRadius: new BorderRadius.circular(10.0),
),
width: 300.0,
height: 200.0,
alignment: AlignmentDirectional.center,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Center(
child: new SizedBox(
height: 50.0,
width: 50.0,
child: new CircularProgressIndicator(
value: null,
strokeWidth: 7.0,
),
),
),
new Container(
margin: const EdgeInsets.only(top: 25.0),
child: new Center(
child: new Text(
"Progress indicator Loading...",
style: new TextStyle(color: Colors.white),
),
),
),
],
),
),
),
],
),
);
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Container(
child: _loading ? bodyProgress : body,
),
);
}
}
Output

Faq
- How to Work With Progress Indicator In Flutter?
To Work With Progress Indicator In Flutter A lazy way to do it can be using a modal. Which will block the user input, thus preventing any unwanted actions. This would require very little change to your code. Just modifying your
_onLoading
to something like this. - Progress Indicator In Flutter?
To Work With Progress Indicator In Flutter A lazy way to do it can be using a modal. Which will block the user input, thus preventing any unwanted actions. This would require very little change to your code. Just modifying your
_onLoading
to something like this.
Summery
So, It’s All About this tutorial. I hope this tutorial helps you to solve your error. Please Comment Below if You stucks anywhere with my code.
Leave a Reply