嗨,我使用Provider(https://pub.dev/packages/provider)进入我的Flutter应用程序。现在,我想使用提供者消费者将浮动操作按钮管理到脚手架中,以确保在需要隐藏FAB按钮时不会重建脚手架。
现在我创建了一个简单的FAB提供者
class FABProvider extends ChangeNotifier {
FABProvider(bool initialValue) {
this._visible = initialValue;
}
bool _visible;
bool get visible => _visible;
void hide() {
if (_visible) {
_visible = false;
notifyListeners();
}
}
void show() {
if (!_visible) {
_visible = true;
notifyListeners();
}
}
}
我将所有脚手架打包到ChangeNotificationProvider:中
return ChangeNotifierProvider<FABProvider>.value(
value: fabProvider,
child: Scaffold(
...
floatingActionButton: Consumer<FABProvider>(
child: createMyFAB(),
builder: (context, provider, child) {
if (provider.visible) {
return child;
} else {
return null; <-- Now I need to return null when the fab need to be hided otherwise the scaffold does not animate the FAB
}
},
),
...
)
...
我也尝试返回一个Offset((或Container((,但当返回一个Widget而不是null时,Scaffold不会动画化fab的可见性。
如果您使用的是Provider 4.1.0或更高版本,您可以使用参数生成器来使用上面的提供程序,而不是使用Consumer
(这会迫使您返回Widget,因此您不能使用null(,这样您就可以将null返回到floatingActionButton
,并在更改时激发动画(预先确定为缩放(
return ChangeNotifierProvider<FABProvider>.value(
value: fabProvider,
builder: (context, child) {
final visible = context.select((FABProvider fab) => fab.visible);
return Scaffold(
floatingActionButton: visible ? createMyFAB() : null
...
}
)