Flutter:提供程序未更新UI



我正在使用Fluttersprovider库,但在更新UI时遇到问题。我正在执行一个简单的HTTP POST,如果发生错误,我想更新我的UI

这是我的提供者中的逻辑:

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();
}
}

这是我的UI:

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,我的错误小部件似乎也根本没有得到通知。

我错过了什么?

我认为当您在ui中使用其他更改通知程序提供程序时会出现问题。当您触发send-config函数时,您正在使用您在main.dart中提供的更改通知程序提供程序来触发它。没关系。但是在您的ui中,您将一个使用者附加到另一个未触发send-config的提供者。

修复方法:不要返回ChangeNotificationProvider,而只是返回消费者

相关内容

  • 没有找到相关文章