Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
从 PHP API 获取数据并填充 Flutter 表格_创想鸟

从 PHP API 获取数据并填充 Flutter 表格

从 php api 获取数据并填充 flutter 表格

本文档旨在指导开发者如何从 PHP API 获取数据,并使用 Flutter 的 Table 组件将数据动态地填充到表格中。文章将涵盖数据模型的定义、API 数据的获取、JSON 解析以及表格的构建,同时提供代码示例和注意事项,帮助开发者解决常见的 NoSuchMethodError 问题。

数据模型定义

首先,我们需要定义一个 Dart 类来映射从 PHP API 获取的 JSON 数据。根据提供的 JSON 示例,我们已经有了 Model 和 Tender 类。确保这些类中的字段类型与 API 返回的数据类型一致。例如,如果 API 返回的某个字段可能为 null,则在 Dart 类中将其声明为可空类型(例如 String? 或 dynamic)。

class Model {  Model({    this.id,    this.goodsRef,    this.loyer,    this.bnCode,    this.loyeeNo,    this.contactName,    this.contactTel,    this.bnDesc,    this.reqStatus,    this.eMail,    this.comments,    this.tender,    this.reqDate,    this.sscOffice,  });  final String? id;  final int? goodsRef;  final String? loyer;  final String? bnCode;  final int? loyeeNo;  final dynamic contactName;  final dynamic contactTel;  final String? bnDesc;  final String? reqStatus;  final dynamic eMail;  final String? comments;  final List? tender;  final DateTime? reqDate;  final dynamic sscOffice;  factory Model.fromJson(Map json) => Model(    id: json["u0024id"] == null ? null : json["u0024id"],    goodsRef: json["goods_ref"] == null ? null : json["goods_ref"],    loyer: json["loyer"] == null ? null : json["loyer"],    bnCode: json["bn_code"] == null ? null : json["bn_code"],    loyeeNo: json["loyee_no"] == null ? null : json["loyee_no"],    contactName: json["contact_name"],    contactTel: json["contact_tel"],    bnDesc: json["bn_desc"] == null ? null : json["bn_desc"],    reqStatus: json["req_status"] == null ? null : json["req_status"],    eMail: json["e_mail"],    comments: json["comments"] == null ? null : json["comments"],    tender: json["tender"] == null ? null : List.from(json["tender"].map((x) => Tender.fromJson(x))),    reqDate: json["req_date"] == null ? null : DateTime.tryParse(json["req_date"]),    sscOffice: json["ssc_office"],  );  Map toJson() => {    "u0024id": id == null ? null : id,    "goods_ref": goodsRef == null ? null : goodsRef,    "loyer": loyer == null ? null : loyer,    "bn_code": bnCode == null ? null : bnCode,    "loyee_no": loyeeNo == null ? null : loyeeNo,    "contact_name": contactName,    "contact_tel": contactTel,    "bn_desc": bnDesc == null ? null : bnDesc,    "req_status": reqStatus == null ? null : reqStatus,    "e_mail": eMail,    "comments": comments == null ? null : comments,    "tender": tender == null ? null : List.from(tender!.map((x) => x.toJson())),    "req_date": reqDate == null ? null : reqDate!.toIso8601String(),    "ssc_office": sscOffice,  };}class Tender {  Tender({    this.id,    this.goodsRef,    this.inNo,    this.tenderNo,    this.closingDate,  });  final String? id;  final int? goodsRef;  final int? inNo;  final String? tenderNo;  final String? closingDate;  factory Tender.fromJson(Map json) => Tender(    id: json["u0024id"] == null ? null : json["u0024id"],    goodsRef: json["goods_ref"] == null ? null : json["goods_ref"],    inNo: json["in_no"] == null ? null : json["in_no"],    tenderNo: json["tender_no"] == null ? null : json["tender_no"],    closingDate: json["closing_date"] == null ? null : json["closing_date"],  );  Map toJson() => {    "u0024id": id == null ? null : id,    "goods_ref": goodsRef == null ? null : goodsRef,    "in_no": inNo == null ? null : inNo,    "tender_no": tenderNo == null ? null : tenderNo,    "closing_date": closingDate == null ? null : closingDate,  };}

注意:

将可能为 null 的字段类型改为可空类型,例如 String?。使用 DateTime.tryParse 来解析日期字符串,避免解析失败。在 toJson 方法中,对可空列表进行非空判断。

从 PHP API 获取数据

使用 http 包从 PHP API 获取数据。确保已在 pubspec.yaml 文件中添加了 http 依赖。

立即学习“PHP免费学习笔记(深入)”;

dependencies:  flutter:    sdk: flutter  http: ^0.13.5 # 确保使用最新版本

然后,可以使用以下代码从 API 获取数据:

import 'dart:convert';import 'package:http/http.dart' as http;Future<List> fetchItems(String email) async {  String apiurl = "YOUR_API_ENDPOINT"; // 替换为你的 API 端点  var response = await http.post(Uri.parse(apiurl), body: {    'username': email //get the username text  });  if (response.statusCode == 200) {    // 使用 utf8.decode 处理中文乱码问题    final decodedBody = utf8.decode(response.bodyBytes);    List jsonResponse = jsonDecode(decodedBody);    List model = jsonResponse.map((item) => Model.fromJson(item)).toList();    return model;  } else {    throw Exception('Failed to load data from API');  }}

注意:

将 YOUR_API_ENDPOINT 替换为你的实际 API 端点。使用 utf8.decode(response.bodyBytes) 处理中文乱码问题。使用 Model.fromJson(item) 将 JSON 数据转换为 Model 对象。添加错误处理,当 API 请求失败时抛出异常。

构建 Flutter 表格

获取到数据后,就可以使用 Table 组件来显示数据。

import 'package:flutter/material.dart';class MyTable extends StatefulWidget {  final String email;  const MyTable({Key? key, required this.email}) : super(key: key);  @override  _MyTableState createState() => _MyTableState();}class _MyTableState extends State {  late Future<List> _dataFuture;  @override  void initState() {    super.initState();    _dataFuture = fetchItems(widget.email);  }  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(title: const Text('Data Table')),      body: FutureBuilder<List>(        future: _dataFuture,        builder: (context, snapshot) {          if (snapshot.connectionState == ConnectionState.waiting) {            return const Center(child: CircularProgressIndicator());          } else if (snapshot.hasError) {            return Center(child: Text('Error: ${snapshot.error}'));          } else if (snapshot.hasData) {            return SingleChildScrollView(              scrollDirection: Axis.horizontal,              child: Table(                border: TableBorder.all(width: 1, color: Colors.black45),                columnWidths: const {                  0: IntrinsicColumnWidth(),                  1: IntrinsicColumnWidth(),                  2: IntrinsicColumnWidth(),                  3: IntrinsicColumnWidth(),                },                children: [                  // 表头                  TableRow(                    children: [                      TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: const Text('Goods Ref')))),                      TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: const Text('Loyer')))),                      TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: const Text('BN Code')))),                      TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: const Text('BN Desc')))),                    ],                  ),                  // 表格数据                  ...snapshot.data!.map((item) {                    return TableRow(                      children: [                        TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: Text(item.goodsRef?.toString() ?? '')))),                        TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: Text(item.loyer ?? '')))),                        TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: Text(item.bnCode ?? '')))),                        TableCell(child: Center(child: Padding(padding: const EdgeInsets.all(8.0), child: Text(item.bnDesc ?? '')))),                      ],                    );                  }).toList(),                ],              ),            );          } else {            return const Center(child: Text('No data available'));          }        },      ),    );  }}

关键点:

使用 FutureBuilder 来处理异步数据加载。在 Text 组件中使用 item.propertyName ?? ” 来处理可能为 null 的值,避免 NoSuchMethodError。使用 SingleChildScrollView 包裹 Table 组件,以支持水平滚动。添加表头,使表格更易于理解。使用 IntrinsicColumnWidth 可以让单元格根据内容自动调整宽度。

解决 NoSuchMethodError

NoSuchMethodError: The getter ‘length’ was called on null 错误通常发生在尝试访问 null 值的属性时。例如,如果 nameone.sn 为 null,则 nameone.sn.length 会抛出此错误。

解决方法是在访问可能为 null 的属性之前,使用空值检查或空值合并运算符 ??。例如:

Text(nameone.sn ?? "") // 如果 nameone.sn 为 null,则显示空字符串

或者,可以使用条件判断:

Text(nameone.sn != null ? nameone.sn : "")

在上面的代码示例中,我们已经使用了空值合并运算符 ?? 来处理可能为 null 的值,从而避免了 NoSuchMethodError。

总结

本文档详细介绍了如何从 PHP API 获取数据并在 Flutter 中使用 Table 组件显示数据。通过定义数据模型、使用 http 包获取数据、解析 JSON 数据以及使用空值合并运算符处理 null 值,可以有效地构建动态表格并避免常见的错误。记住,在处理 API 数据时,始终要考虑数据可能为 null 的情况,并采取相应的措施来避免运行时错误。

以上就是从 PHP API 获取数据并填充 Flutter 表格的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1324903.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
使用PHP正则表达式提取Meta Description中的数字
上一篇 2025年12月12日 11:32:05
Laravel 管理后台集成:内容管理最佳实践
下一篇 2025年12月12日 11:32:16

相关推荐

  • MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸

    MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸MAC如何设置动态壁纸_macOS设置动态桌面与视频壁纸

    首先启用系统自带动态桌面,进入“系统设置”>“墙纸”,选择“动态”类别并预览应用;其次可通过HEIC格式Live Photo设为动态壁纸,需从iPhone同步后导出原片并拖入墙纸设置;若想使用视频壁纸,则需借助Wallpaper Engine等第三方工具导入视频并设为背景;最后高级用户可编写A…

    2026年9月26日 • 用户投稿
    000
  • 构建健壮的Java用户输入:Scanner整数解析与异常捕获

    构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获

    本文深入探讨了Java Scanner在获取整数输入时,当用户输入非整数数据可能引发的InputMismatchException。我们将解释此异常的产生机制,并提供一种健壮的解决方案:通过结合try-catch语句有效捕获并处理该异常,从而避免程序崩溃,提升用户交互的稳定性与友好性。 1. Jav…

    2026年9月26日 • 用户投稿
    000
  • sublime怎么配置golang build system_sublime Golang Build System配置

    sublime怎么配置golang build system_sublime Golang Build System配置sublime怎么配置golang build system_sublime Golang Build System配置sublime怎么配置golang build system_sublime Golang Build System配置sublime怎么配置golang build system_sublime Golang Build System配置

    首先确保Go环境已安装并可用,然后在Sublime Text中创建自定义构建系统:通过Tools → Build System → New Build System添加支持go run、go build和gofmt的JSON配置,保存为Go.sublime-build至User目录;之后在.go文件…

    2026年9月26日 • 用户投稿
    100
  • 格子达查重入口官网地址—格子达学位论文检测入口

    格子达查重入口官网地址—格子达学位论文检测入口格子达查重入口官网地址—格子达学位论文检测入口格子达查重入口官网地址—格子达学位论文检测入口格子达查重入口官网地址—格子达学位论文检测入口

    格子达查重入口官网地址是www.gezida.com,用户可通过该网站登录格子达Gocheck系统进行论文重复率检测,支持多格式上传、智能比对与报告生成。 格子达查重入口官网地址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来格子达学位论文检测入口官网地址,感兴趣的网友一起随小编来瞧瞧吧!…

    2026年9月26日 • 用户投稿
    000
  • 京东国际双11跨境商品如何退货_京东国际双11跨境商品退货流程

    京东国际双11跨境商品如何退货_京东国际双11跨境商品退货流程京东国际双11跨境商品如何退货_京东国际双11跨境商品退货流程京东国际双11跨境商品如何退货_京东国际双11跨境商品退货流程京东国际双11跨境商品如何退货_京东国际双11跨境商品退货流程

    答案:京东国际跨境商品退货需在海关放行30天内申请,45天内寄达指定仓,符合7天无理由且非限制类商品可退,经海关验核后税款与额度自动返还。 如果您在京东国际双11期间购买的跨境商品需要退货,但不确定具体流程和规则,以下是根据海关规定和京东平台政策整理的详细操作指南。请严格按照时间限制和步骤执行,以确…

    2026年9月26日 • 用户投稿
    000
  • 利好!TikTokShop欧洲市场入驻标准更新

    利好!TikTokShop欧洲市场入驻标准更新利好!TikTokShop欧洲市场入驻标准更新利好!TikTokShop欧洲市场入驻标准更新利好!TikTokShop欧洲市场入驻标准更新

    近日,tiktokshop跨境电商针对欧洲市场释放利好信号!英国、西班牙、德国、意大利、法国欧洲五国跨境自运营(pop)模式,入驻标准更新及商家扶持新政策迎来官宣。 最新招商政策中,新商的调整核心在于,商家的第三方电商平台运营经验由【必填】调整为【选填】。同时,TikTokShop美区重点商家、有亚…

    2026年9月26日 • 用户投稿
    000
  • sublime怎么在windows下实现免安装绿色版_Windows便携版制作与使用

    sublime怎么在windows下实现免安装绿色版_Windows便携版制作与使用sublime怎么在windows下实现免安装绿色版_Windows便携版制作与使用sublime怎么在windows下实现免安装绿色版_Windows便携版制作与使用sublime怎么在windows下实现免安装绿色版_Windows便携版制作与使用

    制作Sublime Text绿色版只需下载zip包并解压,然后在安装目录内创建“Data”文件夹,启动后所有配置和插件将自动存入该文件夹,实现便携化。 在Windows下制作Sublime Text的免安装绿色版,其实比你想象的要简单直接得多。核心思路就是让Sublime Text把它的所有配置、插…

    2026年9月26日 • 用户投稿
    100
  • VS Code工作台定制:活动栏与面板可见性配置指南

    隐藏活动栏可通过命令面板执行“View: Toggle Activity Bar Visibility”或设置”workbench.activityBar.visible”: false;2. 面板可用Ctrl+J切换显示,通过”workbench.panel.d…

    2026年9月26日
    000
  • 雷神主机电源啸叫?12V 输出纹波异常示波器检测排障​

    雷神主机电源啸叫?12V 输出纹波异常示波器检测排障​雷神主机电源啸叫?12V 输出纹波异常示波器检测排障​雷神主机电源啸叫?12V 输出纹波异常示波器检测排障​雷神主机电源啸叫?12V 输出纹波异常示波器检测排障​

    电源啸叫且12v输出纹波异常通常由内部元件老化、损坏或负载过高引起,解决方法包括:1.初步检查,如听音辨位、观察风扇、检查电容、闻气味;2.使用示波器检测12v输出纹波并分析波形;3.根据分析结果更换滤波电容、降低负载、改善散热;4.无法修复时更换电源。长期使用啸叫电源可能导致电压不稳定、纹波过大、…

    2026年9月26日 • 用户投稿
    100
  • 怎么让豆包AI生成Python数据可视化代码

    怎么让豆包AI生成Python数据可视化代码怎么让豆包AI生成Python数据可视化代码怎么让豆包AI生成Python数据可视化代码怎么让豆包AI生成Python数据可视化代码

    明确需求、指定图表类型和库、提供数据结构或示例,能高效让豆包ai生成python可视化代码。1. 先说明要画什么图,如“柱状图”;2. 指定用哪个库,如matplotlib或seaborn;3. 提供数据结构或部分数据;4. 检查生成代码是否完整,必要时补充导入语句或显示命令。 ☞☞☞AI 智能聊天…

    2026年9月26日 • 用户投稿
    000
  • 京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制

    京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制

    “网购时绑定新银行卡会不会被盗刷?””信用卡在平台消费是否存在风险?”随着京东等电商平台支付场景的不断拓展,用户对支付安全的关注度持续攀升。本文深入剖析京东新卡支付与信用卡支付的安全机制,用技术逻辑和平台规则消除你的顾虑。 一、京东新卡支付安全机制解析 1. 什么是京东新卡支付? 当用户首次在京东使…

    2026年9月26日 • 用户投稿
    000
  • Tomcat日志中常见的性能瓶颈是什么

    在tomcat日志中,常见的性能瓶颈主要包括以下几个方面: 线程数配置不当: 问题描述:Tomcat的线程数配置不合理可能导致请求堆积或线程资源浪费。如果线程数过少,可能无法处理高并发请求,导致请求延迟增加。相反,线程数过多可能导致频繁的上下文切换和资源竞争,影响性能。解决方法:根据服务器的硬件资源…

    2026年9月26日
    000
  • 《少林vs武当:传奇》上架Steam 暂不支持中文

    《少林vs武当:传奇》上架Steam 暂不支持中文《少林vs武当:传奇》上架Steam 暂不支持中文《少林vs武当:传奇》上架Steam 暂不支持中文《少林vs武当:传奇》上架Steam 暂不支持中文

    近日,格斗游戏新作《少林vs武当:传奇》(shaolin vs wutang legends)正式登陆steam平台,目前尚未公布具体发售时间,且暂未提供中文支持。 Steam商店页面:[点击前往](https://www.php.cn/link/b1a5a84a3388b3f37634445bd1…

    2026年9月26日 • 用户投稿
    000
  • 360极速浏览器下载任务中断或失败怎么办_下载失败问题排查与解决方法

    360极速浏览器下载任务中断或失败怎么办_下载失败问题排查与解决方法360极速浏览器下载任务中断或失败怎么办_下载失败问题排查与解决方法360极速浏览器下载任务中断或失败怎么办_下载失败问题排查与解决方法360极速浏览器下载任务中断或失败怎么办_下载失败问题排查与解决方法

    360极速浏览器下载失败可尝试关闭下载加速模块、调整IE安全设置、切换默认下载工具、更新浏览器或使用IDM等第三方工具解决。 如果您在使用360极速浏览器下载文件时,发现下载任务频繁中断或直接失败,可能是由于浏览器设置、网络环境或安全策略限制所致。以下是针对此问题的详细排查与解决方法。 本文运行环境…

    2026年9月26日 • 用户投稿
    200
  • 怎样制作wps文档

    怎样制作wps文档怎样制作wps文档怎样制作wps文档怎样制作wps文档

    首先打开WPS Office,可新建空白文档自由编辑,或选择预设模板快速生成简历、报告等标准文件,也可导入.doc、.docx等格式的外部文件进行修改与保存。 如果您想要创建一份专业的文档,但不确定如何开始,WPS Office 提供了简单直观的方式来帮助您完成。通过其丰富的编辑功能和模板资源,您可…

    2026年9月26日 • 用户投稿
    000
  • 雷神 911 主机如何测试 M.2 接口?带宽性能评估​

    雷神 911 主机如何测试 M.2 接口?带宽性能评估​雷神 911 主机如何测试 M.2 接口?带宽性能评估​雷神 911 主机如何测试 M.2 接口?带宽性能评估​雷神 911 主机如何测试 M.2 接口?带宽性能评估​

    要测试雷神 911 主机 m.2 接口的带宽性能,首先确认其支持的协议(pcie 或 sata)及规格,可查阅主板说明书或使用硬件检测工具;准备 m.2 ssd、最新驱动、windows 10/11 系统及测试软件如 crystaldiskmark 和 as ssd benchmark;运行测试并记…

    2026年9月26日 • 用户投稿
    000
  • 如何在Java方法中正确传递和使用数组参数

    如何在Java方法中正确传递和使用数组参数如何在Java方法中正确传递和使用数组参数如何在Java方法中正确传递和使用数组参数如何在Java方法中正确传递和使用数组参数

    本文旨在帮助Java初学者理解如何在方法中正确传递和使用数组作为参数。通过一个实际的代码示例,详细讲解了如何创建、传递和访问数组,以及如何在方法内部对数组进行操作,最终返回期望的结果。掌握这些技巧对于编写高效且功能完善的Java程序至关重要。 在Java编程中,方法经常需要接收数组作为参数,以便对一…

    2026年9月26日 • 用户投稿
    500
  • 货拉拉司机版如何使用AI推荐最佳订单_货拉拉司机版AI推荐的智能匹配详解

    货拉拉司机版如何使用AI推荐最佳订单_货拉拉司机版AI推荐的智能匹配详解货拉拉司机版如何使用AI推荐最佳订单_货拉拉司机版AI推荐的智能匹配详解货拉拉司机版如何使用AI推荐最佳订单_货拉拉司机版AI推荐的智能匹配详解货拉拉司机版如何使用AI推荐最佳订单_货拉拉司机版AI推荐的智能匹配详解

    货拉拉司机版通过AI智能匹配系统,基于位置、车辆类型、货运需求与历史行为等数据筛选高匹配订单,并结合AR识货、智能导航与安全预警功能,提升接单效率与运输安全。 如果您在货拉拉司机版中希望获得更高效的接单体验,但不清楚如何利用系统内的AI功能来获取最适合的订单,则可能是由于尚未了解智能匹配机制的运作方…

    2026年9月26日 • 用户投稿
    200
  • 通过Intent将图片分享至Adobe Lightroom (Android)

    通过Intent将图片分享至Adobe Lightroom (Android)通过Intent将图片分享至Adobe Lightroom (Android)通过Intent将图片分享至Adobe Lightroom (Android)通过Intent将图片分享至Adobe Lightroom (Android)

    本文将介绍如何使用Kotlin代码,通过隐式Intent将Android应用中的图片直接分享至Adobe Lightroom移动版。通过设置Intent的Action、Extra和Type,并指定目标应用的包名,可以实现从自定义应用无缝跳转至Lightroom进行图片编辑的目的。本文将提供详细的代码…

    2026年9月26日 • 用户投稿
    100
  • 快手视频如何下载保存_快手视频下载保存的简单方法

    快手视频如何下载保存_快手视频下载保存的简单方法快手视频如何下载保存_快手视频下载保存的简单方法快手视频如何下载保存_快手视频下载保存的简单方法快手视频如何下载保存_快手视频下载保存的简单方法

    优先使用快手App内“保存到相册”功能下载公开视频,操作简单且保留原画质;2. 若视频受限制或需无水印版本,可复制链接后通过第三方解析网站提取下载;3. 通用方法为启用手机录屏功能,录制并保存视频内容至相册。 如果您在浏览快手时看到喜欢的视频,想要将其保存到本地设备以便离线观看或分享,但发现部分视频…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信