0

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

type '_InternalLinkedHashMap<String, dynamic>' 不是 'value' 类型 'Map<String, bool>' 的子类型

这是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
        });

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


    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

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

4

2 回答 2

0

在您的代码中:

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

和 :

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

将您的 StateController 更改为<Map<String, bool>>

于 2020-10-03T12:46:53.060 回答
0

尝试这个 :

Map<String, dynamic>.from(yourData)

于 2020-10-03T08:51:49.490 回答