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>>((_) => {