局部更新有好几种方法,本次使用的是 StatefulBuilder 定义 customState去更新对话框内容
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';class ProgressDialog {final BuildContext context;BuildContext? dialogContext;double _progress = 0.0;bool _isShowing = false;StateSetter? mCustomState;ProgressDialog(this.context, this._progress);void show() {_isShowing = true;showDialog<void>(context: context,builder: (BuildContext context) {return StatefulBuilder(builder: (mDialogContext, customState) {mCustomState =customState;dialogContext = mDialogContext;return AlertDialog(title: const Text('下载中...'),content: Column(mainAxisSize: MainAxisSize.min,children: <Widget>[LinearProgressIndicator(value: _progress),Padding(padding: const EdgeInsets.symmetric(vertical: 20.0),child: Text('${(_progress * 100).toStringAsFixed(0)}%'),),],),);});},);}void updateProgress(double progress) {if (_isShowing && null!=mCustomState) {(mCustomState!)(() {_progress = progress;});}}void hide() {if (dialogContext != null && _isShowing) {Navigator.of(dialogContext!).pop();}_isShowing = false;}}
定义 StateSetter? mCustomState; 去set更新
使用
final ProgressDialog progressDialog = ProgressDialog(context, 0);progressDialog.show();更新进度
progressDialog.updateProgress(progress);关闭对话框
progressDialog.hide();