Flutter:提供商未更新 UI
Flutter: Provider not updating UI
我正在使用 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();
}
}
这是我的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 中使用其他更改通知提供商时会出现问题。当您触发发送配置功能时,您将使用您在 main.dart 中提供的更改通知程序提供程序来触发它,没关系。但是在您的 ui 中,您将消费者附加到另一个您尚未触发发送配置的提供者。
修复:不要 RETURN ChangeNotifierProvider 而只是 RETURN 消费者
我正在使用 Flutters provider
库,但在更新 UI 时遇到问题。
我正在执行一个简单的 HTTP POST
,如果发生错误.
这是我的 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();
}
}
这是我的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 中使用其他更改通知提供商时会出现问题。当您触发发送配置功能时,您将使用您在 main.dart 中提供的更改通知程序提供程序来触发它,没关系。但是在您的 ui 中,您将消费者附加到另一个您尚未触发发送配置的提供者。
修复:不要 RETURN ChangeNotifierProvider 而只是 RETURN 消费者