求解同样的方式,为啥第一种不行,第二种可以。
//外部定义的。
StateSetter ss;
//调用
Timer.periodic(Duration(milliseconds:300), (timer) {
if (ss !=null) {
i ++;
btnText ="BBBBB"+i.toString();
print("CCCCCC"+i.toString());
ss(() {
});
}
if (i >=20) {
timer.cancel();
ss =null;
}
});
//第一种方式
StatefulBuilder widget =DialogWidget().getDialog(
leftBtnText:btnText,
stateCallback:ss
);
//第二种方式
var sb =StatefulBuilder(builder: (ctx, state) {
print("----------------------11111");
print(state);
print("----------------------2222");
ss = state;
return AlertDialog(
titlePadding:EdgeInsets.all(0.0),
title:Container(
child:Text(btnText),
),
);
});
showDialog(
context: context,
barrierDismissible:false,
builder: (context) {
return widget;
});
//第一种方式的第三方类。
class DialogWidget{
WidgetgetDialog({
String title,
String inputTitle,
String errorText,
String tipsText,
String leftBtnText,
String rightBtnText,
VoidCallback leftCallback,
VoidCallback rightCallback,
StateSetter stateCallback,
BuildContext context,
}) {
var sb =StatefulBuilder(builder: (ctx, state) {
stateCallback = state;
print("----------------------11111");
print(state);
print(stateCallback);
print("----------------------2222");
return AlertDialog(
titlePadding:EdgeInsets.all(0.0),
title:Container(
child:Text(leftBtnText), //_getBody(),
),
);
});
return sb;
}
网友评论