【问题标题】:Riverpod: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, bool>' of 'value' FlutterRiverpod:类型“_InternalLinkedHashMap<String, dynamic>”不是“value”Flutter 类型“Map<String, bool>”的子类型
【发布时间】:2021-01-18 18:20:41
【问题描述】:

我有一个从FutureProvider 获取数据的应用程序,一切正常。除了我不能在我的应用程序中更改其他providers 的状态。当我这样做时,我得到了这个错误

type '_InternalLinkedHashMap' 不是 'value' 类型 'Map' 的子类型

这里是我的所有providers,用于此示例


final connectionTypeProvider = FutureProvider.autoDispose((_) async {
  final ConnectionType connectionType = await kGetConnectionType();
  return connectionType;
});


    final loadFromDatabase =
        StateProvider<Map<String, bool>>((_) => {"loadFromDatabase": false});


    final userAuthProvider = StateProvider<Map<String, bool>>((_) => {
          'signedIn': false,
          'loaded': true,
          'signInWasDissmised': false,
          'userIsConnectedToInternet': true
        });

这就是我如何使用它。请参考代码中的 cmets。


    class GetPage extends ConsumerWidget {
      const GetPage({@required this.appState});
    
      final Map<String, bool> appState;
    
      @override
      Widget build(BuildContext context, ScopedReader watch) {
        StateController<Map<String, bool>> fromDatabase = watch(loadFromDatabase);
        StateController<Map<String, dynamic>> isConnected = watch(userAuthProvider);
        return watch(connectionTypeProvider).when(
            data: (data) {
              if (data == ConnectionType.none) { // Until here it works just fine
                // Check database for previous data and if there is, show it to the user
                final String database = 'Data';
                if (database.isNotEmpty) {
                  fromDatabase.state = { // Here the problem happens
                    ...fromDatabase.state,
                    "loadFromDatabase": true
                  };
                  print(fromDatabase);
                  return Home();
                } else {
                  isConnected.state = {  // Here the problem happens
                    ...isConnected.state,
                    'userIsConnectedToInternet': false
                  };

                  // ... Other code

那么问题是什么,我该如何解决呢?谢谢

【问题讨论】:

    标签: flutter dictionary dart state-management riverpod


    【解决方案1】:

    试试这个:

    地图.from(yourData)

    【讨论】:

      【解决方案2】:

      在您的代码中:

          StateController<Map<String, dynamic>> isConnected = watch(userAuthProvider);
      

      还有:

      final userAuthProvider = StateProvider<Map<String, bool>>((_) => {
      

      将您的 StateController 更改为 &lt;Map&lt;String, bool&gt;&gt;

      【讨论】:

        猜你喜欢
        • 2021-10-06
        • 2023-04-02
        • 2019-03-23
        • 1970-01-01
        • 2018-12-14
        • 2019-05-02
        • 2020-03-04
        • 2019-04-03
        • 2020-11-30
        相关资源
        最近更新 更多