Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter: Progress dialog is not hiding

Tags:

flutter

dart

I am using progress_dialog 1.2.0 package to show a progress dialog in my app, it is showing when I call pr.show() but not getting hidden when I call pr.hide():

onTap: () async {
    pr.show();

    print('clicked custom category');
    print(categorylist[index].catName);
    print(categorylist[index].catId);

    // await getAllProductsInCategory(categorylist[index].catId);

    setState(() {
        catId = categorylist[index].catId;
        myinitlist.clear();
        myinitlist = List.from(productList);
        pr.hide();
    });
},

When I uncomment that getAllProductsInCategory() function it hides the dialog.

like image 801
Alvin John Niravukalayil Avatar asked Oct 21 '19 21:10

Alvin John Niravukalayil


2 Answers

Try with :

onTap: () async {
    pr.show();

    print('clicked custom category');
    print(categorylist[index].catName);
    print(categorylist[index].catId);

    setState(() {
      catId = categorylist[index].catId;
      myinitlist.clear();
      myinitlist = List.from(productList);

       Future.delayed(Duration(seconds: 3)).then((value) {
         pr.hide().whenComplete(() {
          print(pr.isShowing());
        });
       });
    });
 },

or :

onTap: () async {
    pr.show();

    print('clicked custom category');
    print(categorylist[index].catName);
    print(categorylist[index].catId);

   Future.delayed(Duration(seconds: 3)).then((value) {
    setState(() {
      catId = categorylist[index].catId;
      myinitlist.clear();
      myinitlist = List.from(productList);


         pr.hide().whenComplete(() {
          print(pr.isShowing());
        });
       });
    });
 },
like image 79
Anil Chauhan Avatar answered Oct 15 '22 17:10

Anil Chauhan


Please use await keyword when you are using async calls to start progressDialog & hide:

await progressDialog.show();
await progressDialog.hide();

Example:

Add the Package:

dependencies:
  progress_dialog: ^1.2.4

import 'package:progress_dialog/progress_dialog.dart';

Create and initialize a ProgressDialog object inside the build() method passing context to it. Initialize the ProgressDialog object:

final ProgressDialog pr = ProgressDialog(context);

By default it is a normal dialog to show some message, if you would like to use it to show percentage of progress done, specify the optional type parameter and specify if you want your dialog to dismiss when back button is pressed isDismissible parameter (Optional):

//For normal dialog
pr = ProgressDialog(context,type: ProgressDialogType.Normal, isDismissible: true/false, showLogs: true/false);
    
//For showing progress percentage
pr =  ProgressDialog(context,type: ProgressDialogType.Download, isDismissible: true/false, showLogs: true/false);
> Note: Please initialize the ```ProgressDialog```, where you have availability of the context
Style the progress dialog (Optional)
pr.style(
  message: 'Downloading file...',
  borderRadius: 10.0,
  backgroundColor: Colors.white,
  progressWidget: CircularProgressIndicator(),
  elevation: 10.0,
  insetAnimCurve: Curves.easeInOut,
  progress: 0.0,
  textDirection: TextDirection.rtl,
  maxProgress: 100.0,
  progressTextStyle: TextStyle(
     color: Colors.black, fontSize: 13.0, fontWeight: FontWeight.w400),
  messageTextStyle: TextStyle(
     color: Colors.black, fontSize: 19.0, fontWeight: FontWeight.w600)
  );

Note: You don't need to use all parameters, all of them are optional.

Showing the progress dialog:

await pr.show();
Dynamically update the content shown out there
pr.update(
  progress: 50.0,
  message: "Please wait...",
  progressWidget: Container(
    padding: EdgeInsets.all(8.0), child: CircularProgressIndicator()),
  maxProgress: 100.0,
  progressTextStyle: TextStyle(
    color: Colors.black, fontSize: 13.0, fontWeight: FontWeight.w400),
  messageTextStyle: TextStyle(
    color: Colors.black, fontSize: 19.0, fontWeight: FontWeight.w600),
  );

Dismissing the progress dialog:

pr.hide().then((isHidden) {
  print(isHidden);
});

// or
await pr.hide();

Navigating to next screens must be done after the completion of Future - hide(). See here for example. Check if progress dialog is showing:

bool isProgressDialogShowing = pr.isShowing();
print(isProgressDialogShowing);
Use custom body
    pr = ProgressDialog(
      context,
      type: ProgressDialogType.Normal,
      isDismissible: true,
      /// your body here
      customBody: LinearProgressIndicator(
        valueColor: AlwaysStoppedAnimation<Color>(Colors.blueAccent),
        backgroundColor: Colors.white,
      ),
    );

For more details: https://flutterrepos.com/repo/fayaz07-progress_dialog-

like image 32
Suresh B B Avatar answered Oct 15 '22 17:10

Suresh B B