Flutter 从零到一

iOS 调试与开发工具指南

真机调试

  1. Xcode run 在控制台获取 Dart VM service URI
  2. VSCode 点击 Cmd + Shift + P 选择 Debug: Attach to Flutter on Device
  3. 粘贴 the URI 后点击 Enter

对于iOS开发者来说,使用appuploader这样的iOS开发助手可以简化真机调试的准备工作。appuploader提供了证书管理、设备UDID获取等功能,能帮助开发者快速完成调试环境的配置。

常见问题:Exception attempting to connect to the VM Service: SocketException: Connection refused

shell 复制代码
flutter devices
flutter attach -d <deviceId>

inspector

  1. VSCode 点击 Cmd + Shift + P 选择 Dart: Open DevTools in Browser
  2. select widget mode

通用地图

状态管理

Consumer
  • 监听Provider提供的数据,当在应用的某个地方使用Provider 来暴露一个数据模型时,你可以在widget树的任何其他地方使用 Consumer 来读取并响应这个数据模型的变化。
  • 当 Provider 中的数据发生变化时,Consumer 会自动重建其子widget,这样就可以根据新的数据状态更新UI。
Provider 数据更新后页面未刷新
  1. 没有调用 notifyListeners()
  2. context 不同 页面若取的是当前页面的 context 而不是管理 Provider 数据页面的 context 那无法拿到 Provider 数据
  3. 没有触发 set 方法 在方法中更新私有变量时直接调用的下划线方法 _unreadNum 而不是通过它的 setter 方法来更新的
  4. 没有改变引用

原生交互

dart 复制代码
// 原生代码   
FlutterMethodChannel *pushInitChannel = [FlutterMethodChannel methodChannelWithName:@"jd.logistic.pushInitChannel" binaryMessenger:controller.binaryMessenger];
[pushInitChannel invokeMethod:@"saveNotification" arguments:jsonString];
    
  
// flutter 代码
MethodChannel pushInitChannel = MethodChannel('jd.logistic.pushInitChannel');
pushInitChannel.setMethodCallHandler(_handleNativeMethod);

Future<void> _handleNativeMethod(MethodCall call) async {
    switch (call.method) {
      case 'saveNotification':
        String data = call.arguments;
        saveMessageToDatabase(data);
        break;
      default:
        print("Unknown method called");
    }
  }

国际化

VSCode 安装 flutter Intl 插件

特殊 UI

自动计算高度

GridView shrinkWrap

GridViewshrinkWrap 属性决定了是否根据子组件的总长度来调整 GridView 的长度。

dart 复制代码
GridView.builder(
  shrinkWrap: true,
)
AnimatedSize
dart 复制代码
Consumer<PackageTabWidgetViewModel>(builder: (BuildContext context, value, Widget? child) {
  return AnimatedSize(
    duration: Duration(milliseconds: 50),
    curve: Curves.easeInOut,
    child: value.model.selectedIndex == 0
        ? ReceivePackageList()
        : SendPackageList(),
  );
})

常见问题

  1. 新增本地图片后加载时报错 Unable to load asset
  1. Command PhaseScriptExecution failed with a nonzero exit code

清除 Flutter 应用的本地缓存 flutter pub cache clean

  1. 执行 flutter doctor 后报错 Xcode installation is incomplete
shell 复制代码
# 确保 Xcode 已正确配置
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
  1. Flutter 运行IOS真机,提示无法打开"iproxy"

在终端输入命令行 sudo xattr -d com.apple.quarantine ${flutter SDK iproxy 路径}

  1. Target of URI doesn't exist: 'package:xxx_image.dart'. Try creating the file referenced by the URI, or Try using a URI for a file that does exist.

执行 Flutter: Clean Project

  1. jaguar_serializer 数据解析报错
shell 复制代码
flutter packages pub run build_runner build --delete-conflicting-outputs --verbose

在iOS开发过程中,使用appuploader可以简化证书管理、设备注册等繁琐流程,让开发者能更专注于代码本身。它提供了可视化的操作界面,特别适合刚接触iOS开发的新手快速上手。

相关推荐
ai_coder_ai19 小时前
在自动化脚本中如何使用websocket?
websocket·autojs·自动化脚本·冰狐智能辅助·easyclick
Chockmans19 小时前
春秋云境CVE-2017-3506
安全·web安全·网络安全·系统安全·安全威胁分析·春秋云境·cve-2017-3506
凯瑟琳.奥古斯特20 小时前
NAT原理及作用详解
网络·网络协议
KnowSafe21 小时前
CLM最佳实践:构建高效证书生命周期管理体系
安全·https·clm·itrustssl·trustasia
W.A委员会21 小时前
DNS详解
http
_Evan_Yao1 天前
从 IP 路由到 Agent 路由:最长前缀匹配如何帮你分发任务?
java·网络·后端·网络协议·tcp/ip
ybdesire1 天前
间接提示词注入真实样例鉴赏
网络安全·语言模型·漏洞·漏洞分析
数据法师1 天前
开源情报收集工具GhostTrack深度测评:IP、手机号、用户名的合规信息查询方案
网络·网络协议·tcp/ip
想成为优秀工程师的爸爸1 天前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信
KnowSafe1 天前
CaaS vs 传统管理:证书即服务的颠覆性优势
https·ssl