Flutter Riverpod:type'_内部链接dhashmap<;字符串,动态>';不是类型为';地图<;字符串,bool>';属于';价值';颤振

Flutter Riverpod:type'_内部链接dhashmap<;字符串,动态>';不是类型为';地图<;字符串,bool>';属于';价值';颤振,flutter,dictionary,dart,state-management,riverpod,Flutter,Dictionary,Dart,State Management,Riverpod,我有一个应用程序,可以从FutureProvider获取数据,一切正常。除非我无法更改我的应用程序中其他提供商的状态。当我这样做的时候,我得到了这个错误 类型“\u InternalLinkedHashMap”不是“value”的类型“Map”的子类型 下面是本例所需的所有提供程序 final connectionTypeProvider = FutureProvider.autoDispose((_) async { final ConnectionType connectionType

我有一个应用程序,可以从
FutureProvider
获取数据,一切正常。除非我无法更改我的应用程序中其他
提供商的状态。当我这样做的时候,我得到了这个错误

类型“\u InternalLinkedHashMap”不是“value”的类型“Map”的子类型

下面是本例所需的所有
提供程序


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


数据库的最终加载=
StateProvider(()=>{“loadFromDatabase”:false});

最终用户身份验证提供者=状态提供者(()=>{
“signedIn”:假,
“加载”:true,
“signinwasdismissed”:false,
“UserIsConnectedPointerNet”:真
});
下面是我如何使用它。请参考代码中的注释


    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


类GetPage扩展了ConsumerWidget{
const GetPage({@required this.appState});
最终地图状态;
@凌驾
小部件构建(BuildContext上下文,ScopeDrawer监视){
StateController fromDatabase=watch(loadFromDatabase);
StateController isConnected=watch(userAuthProvider);
返回手表(connectionTypeProvider)。何时返回(
数据:(数据){
如果(data==ConnectionType.none){//,直到这里它才能正常工作
//检查数据库中以前的数据,如果有,则向用户显示
最终字符串数据库='数据';
if(database.isNotEmpty){
fromDatabase.state={//问题发生在这里
…fromDatabase.state,
“loadFromDatabase”:true
};
打印(来自数据库);
回家();
}否则{
isConnected.state={//问题发生在这里
…断开连接。状态,
“UserIsConnectedPointerNet”:false
};
//…其他代码
那么问题出在哪里?我该如何解决呢?谢谢你试试这个:

映射。从代码中的(您的数据)

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

final userAuthProvider=StateProvider(()=>{
将StateController更改为


    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

    StateController<Map<String, dynamic>> isConnected = watch(userAuthProvider);
final userAuthProvider = StateProvider<Map<String, bool>>((_) => {