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 消费者