You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter报错NoSuchMethodError:String类无logo属性访问器

问题原因

报错NoSuchMethodError: Class 'String' has no instance getter 'logo'的核心原因是:你从Hive读取到的每个数据元素是字符串类型(虽然打印出来像Map格式,但本质是字符串),而非真正的Map或自定义对象,因此无法通过.logo的方式访问属性。

解决方案

临时修复:将字符串解析为Map

如果已经在Hive中存储了字符串格式的Map,可以在读取时将其解析为真正的Map对象:

  1. 导入dart:convert包:
import 'dart:convert';
  1. 修改LoadData函数,将每个字符串元素解析为Map:
Future<List<Map<String, dynamic>>> LoadData() async {
  final box = await Hive.box<dynamic>('my_db');
  return box.values.map((value) {
    // 判断是否为字符串,是则解析为Map
    if (value is String) {
      return jsonDecode(value) as Map<String, dynamic>;
    }
    // 已经是Map则直接返回
    return value as Map<String, dynamic>;
  }).toList();
}
  1. 修改ListView中的属性访问方式,同时注意用循环的index而非固定的1(否则所有列表项都会显示第二个元素的内容):
Text(
  snapshot.data[index]['logo'].toString(),
  style: const TextStyle(
    fontWeight: FontWeight.bold,
    fontSize: 20,
    color: Colors.blue,
  ),
)

规范方案:使用Hive TypeAdapter存储自定义对象

这是Hive的标准用法,能避免手动解析的麻烦:

  1. 创建数据类并生成适配器:
import 'package:hive/hive.dart';

@HiveType(typeId: 0)
class NetworkCard extends HiveObject {
  @HiveField(0)
  late int id;
  
  @HiveField(1)
  late String network;
  
  @HiveField(2)
  late int discount;
  
  @HiveField(3)
  late String logo;

  NetworkCard({required this.id, required this.network, required this.discount, required this.logo});
}

运行命令生成适配器:

flutter packages pub run build_runner build
  1. 在main函数中初始化Hive并注册适配器:
import 'package:hive_flutter/hive_flutter.dart';
import 'network_card.dart'; // 导入你的数据类

void main() async {
  await Hive.initFlutter();
  Hive.registerAdapter(NetworkCardAdapter());
  await Hive.openBox<NetworkCard>('my_db');
  runApp(const MyApp());
}
  1. 修改LoadData函数返回自定义对象列表:
Future<List<NetworkCard>> LoadData() async {
  final box = await Hive.box<NetworkCard>('my_db');
  return box.values.toList();
}
  1. 在ListView中直接访问对象属性:
Text(
  snapshot.data[index].logo,
  style: const TextStyle(
    fontWeight: FontWeight.bold,
    fontSize: 20,
    color: Colors.blue,
  ),
)

内容的提问来源于stack exchange,提问作者Eniedi Monday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:33:31