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

Flutter中如何判断数据库返回数组是否包含指定user_id_liked?

Flutter判断用户是否已点赞帖子的正确实现方式

你当前代码的问题在于,数据库返回的TotalLike是对象数组(每个元素是包含user_id_liked字段的Map),不是单纯的字符串数组,所以用TotalLike.contains("id-2")无法匹配到目标值。

正确实现步骤:

  • 给TotalLike指定明确的类型:List<Map<String, dynamic>> TotalLike = [],避免动态类型带来的问题。
  • 使用List.any()方法遍历数组,检查是否存在user_id_liked等于目标值的对象。
  • 优化请求逻辑,去掉冗余的setState,同时处理请求失败的场景。

修改后的完整代码:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

// 替换成你的实际接口地址
const String url = "你的接口URL";

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 指定明确的数组类型
  List<Map<String, dynamic>> TotalLike = [];

  Future getLike() async {
    try {
      var response = await http.post(
        Uri.parse(url),
        body: {"id_post": "post-9d18d0a280"},
      );
      if (response.statusCode == 200) {
        setState(() {
          TotalLike = List<Map<String, dynamic>>.from(json.decode(response.body));
        });
        print(TotalLike);
      } else {
        print("请求失败,状态码:${response.statusCode}");
      }
    } catch (e) {
      print("请求出错:$e");
    }
  }

  @override
  void initState() {
    getLike();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // 使用any方法检查是否存在目标user_id_liked
    bool hasLiked = TotalLike.any((item) => item['user_id_liked'] == "id-2");

    return Scaffold(
      body: Center(
        child: Container(
          width: 400,
          height: 400,
          color: hasLiked ? Colors.amber : Colors.pink,
        ),
      ),
    );
  }
}

关键说明:

  • TotalLike.any((item) => item['user_id_liked'] == "id-2"):遍历数组中的每个对象,只要有一个对象的user_id_liked等于"id-2",就返回true,代表用户已点赞。
  • List<Map<String, dynamic>>.from(json.decode(response.body)):确保解析后的数组类型正确,避免类型转换异常。
  • 增加了try-catch包裹整个请求逻辑,更全面地处理网络异常。

内容的提问来源于stack exchange,提问作者Meng Qing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:50:36