【发布时间】:2022-01-14 17:59:02
【问题描述】:
我正在使用 Flutters provider 库,但我无法让它更新 UI。
我正在执行一个简单的HTTP POST 并希望在发生错误时更新我的 UI。
这是我的provider中的逻辑:
class DeviceProvider extends ChangeNotifier {
// Enum with possible states: Initial, Loading, Error & Success
APIState state = APIState.Initial;
...
void sendConfig() async {
try {
http.Response postResponse = await http.post(...);
if (postResponse.ok) {
state = APIState.Success;
} else {
state = APIState.Error;
}
} on SocketException catch (e) {
state = APIState.Error;
}
notifyListeners();
}
}
这是我的用户界面:
return ChangeNotifierProvider<DeviceProvider>(
create: (_) => DeviceProvider(),
child: Consumer<DeviceProvider>(
builder: (_, model, __) {
switch (model.state) {
// Display error
case APIState.Error:
return Text('Error');
// Ignore all other states
case APIState.Loading:
case APIState.Initial:
case APIState.Success:
return const Visibility(
child: Text("Gone"),
visible: false,
);
}
},
),
);
我的 main.dart 看起来像这样:
void main() => runApp(
MultiProvider(
providers: [
...
ChangeNotifierProvider<DeviceProvider>(create: (_) => DeviceProvider()),
],
child: const MyApp(),
),
);
现在,我知道代码已执行并且状态确实是Error。
但是,即使我调用 notifyListeners,我的错误小部件似乎也根本没有收到通知。
我错过了什么?
【问题讨论】:
-
这两个
ChangeNotifierProvider是怎么回事? -
尝试在您的提供程序的每次状态更改后添加
notifyListeners()。
标签: flutter dart mobile flutter-provider