- 博客(734)
- 资源 (148)
- 收藏
- 关注
原创 [Flutter]环境判断
常量kReleaseMode,它会根据你的应用是以什么模式编译的来获取值。bool.fromEnvironment会从Dart编译时的环境变量中获取值。对于'dart.vm.product'这个特定的环境变量,它是由Dart VM设置的,用来标明当前是否在产品环境下运行。当应用以Release模式编译时(例如运行flutter build apk或flutter build ios),kReleaseMode会被设置为true。
2024-03-28 18:22:03 493
原创 [Android]Google Play内购产品购买报错The item you were attempting to purchase could not be found.
真机或模拟器,虽然在Google Play登录了测试账号,测试账号也加入了“许可测试”和“内部测试”之中。但是,测试人员还没在真机或模拟器上同意接受测试邀请,所以报上面的错误。
2024-03-28 12:32:22 31
原创 [Android]创建Google Play内购aab白包
开发时需要调试Google内购,需要先往Google商店传一个白包上去。确定包名,然后进行内购产品创建。
2024-03-26 17:35:39 779
原创 [Android]模拟器登录Google Play失败
10.0.2.4 / 10.0.2.5 / 10.0.2.6 可选的第二个、第三个和第四个 DNS 服务器(如果有)网络配置好之后,打开Android模拟器,进入网络设置中,在Android WIFI配置代理。10.0.2.2 主机环回接口的特殊别名(即开发机器上的 127.0.0.1)国内开发,要登录Google Play调试内购肯定是要合理上网的。10.0.2.15 所模拟设备的网络/以太网接口。127.0.0.1 所模拟设备的环回接口。这样设置后,才会走梯子的流量网络正常。端口设为你梯子的代理端口。
2024-03-26 15:10:44 568
原创 [Flutter]运行到Android报错You are applying Flutter‘s app_plugin_loader Gradle plugin imperatively using..
应该在项目搭建时就这样操作,不然等项目开发后,自定义配置比较多时就比较麻烦了。不过自动修复的优势也比较明显,对新手比较友好,比如我手动修复了一半天,运行时还是各种报错。在删除 android目录之前,确保备份任何重要的更改,如 AndroidManifest.xml 的更改、Gradle 配置更改、本地依赖等。同步gradle时若网络中断,会导致缓存文件损坏或下载不完整,需要执行如下命令清理gradle缓存后重新运行。从 Flutter 3.16 开始,使用。重新运行时,会重新同步gradle。
2024-03-22 15:53:19 375
原创 [Flutter]打包APK报错The binary version of its metadata is 1.9.0, expected version is 1.6.0.
flutter run运行项目没任何问题,但打包时终端会报错,最后打包还能成功。虽然能打包,不过这个错误警告还是要处理。│ [!在stackoverflow上有这个问题。
2024-03-22 15:02:49 876
原创 [Flutter]自定义等待转圈和Toast提示
onlyIndicator, // 仅一个转圈等待roundedRectangle, // 添加一个圆角矩形当背景maskingOperation, // 添加一个背景蒙层, 阻止用户操作.remove();});Key?
2024-03-08 14:32:20 402
原创 [Flutter]使用Provider进行状态管理
如果你有多个不同的状态需要管理,你通常会为每种状态创建不同的模型。例如,如果你在一个widget中使用这个模型,你可能需要使用。是Flutter中一个非常流行的状态管理工具,它可以帮助开发者更有效地管理Widget树中的数据。但是,如果你的状态数据非常紧密相关,并且它们通常一起改变,那么将它们放在同一个模型中也是有意义的。通过这种方式,你可以将应用的不同部分的状态管理分离开来,从而使你的代码更加模块化和可维护。更进一步,比如异步从网络获取状态,也是类似的。在你的应用中,你需要在一个合适的位置(如。
2024-03-08 11:17:58 683
原创 [Flutter]TextButton自定义样式
/ 按钮点击事件},backgroundColor: MaterialStateProperty.all(Colors.blue), // 设置背景颜色padding: MaterialStateProperty.all(EdgeInsets.zero), // 设置内边距为零borderRadius: BorderRadius.circular(10.0), // 设置圆角半径),),
2024-02-29 21:41:21 514
原创 [Flutter]VSCode编辑器中的白色垂直线如何去掉
此外,一些项目可能会有自己的.editorconfig文件,这个文件同样可以定义一行代码的最大长度。如果你的项目中有.editorconfig文件,它可能会覆盖VSCode设置中的规则。在Visual Studio Code(VSCode)中,您看到的白色竖线可能是编辑器的“边界线”(也称为“裁剪边界”或“规则指南”),它用来指示一行代码的推荐最大长度。这条线通常是不可拖动的,但是你可以通过VSCode的设置来改变它的位置或者完全禁用它。但实际上,这个长度是可配置的。
2024-02-29 11:50:56 546
原创 [Flutter]倒计时和计时器
这个类不是线程安全的,因为Dart本身是单线程的,但是如果你使用它在Flutter的Isolates(类似于线程)中,请确保你正确地管理状态。此外,如果你的应用需要更复杂的定时器调度,你可能需要考虑其他的包或者解决方案。这个类可以提供启动、暂停、重启和关闭定时器的方法,并且确保定时完成后自动释放定时器资源。这样,你可以在任何地方订阅计时器的变化,并实现回调更新。类提供了更灵活的方式来实现单次或重复的延迟执行。可以在动画帧更新时执行代码,这可以用来实现延迟。方法用于设置定时器,接收延迟时间和要执行的动作。
2024-02-28 23:43:09 633
原创 [Flutter]shared_preferences基本用法以及可视化管理存储的key和value类型
是一个Flutter插件,它提供了一种简单的方式来在应用程序中存储和获取持久化的键值对数据。它可以用于存储应用程序的配置信息、用户偏好设置、登录状态等。使用插件,你可以在应用程序中轻松地保存和读取数据,而无需处理底层的持久化细节。它基于平台的本地存储机制,例如Android中的SharedPreferences和iOS中的NSUserDefaults。
2024-02-28 23:08:27 504
原创 [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
运行上述命令后,flutter_launcher_icons 将根据你指定的源图标文件 app_icon.png 自动生成需要的各种尺寸的图标,并替换 iOS 和 Android 项目中的现有图标。在Flutter开发中,修改应用程序的包名(也称作Application ID)涉及几个步骤,因为包名是在项目的Android和iOS平台代码中分别配置的。这些检查可以帮助你为不同的平台编写特定的代码,例如使用平台特有的插件或者调整UI来匹配用户的期望。的值是一个字符串,用于提供给用户一个有意义的应用程序名称。
2024-02-27 23:21:12 1907
原创 [SwiftUI]启动页LaunchScreen.storyboard中适配状态栏加安全区域的高度
这就意味着,在LaunchScreen.storyboard中若是相对Safe Area约束图片的话,我们会丢失一个20px的状态栏高度。如下图,我有一个需求。要求从启动页切换到引导页时,这两张相同的图片的过渡要无缝衔接,就是要求两图的位置约束一摸一样。在iPhone X之前的设备,会丢失一个状态栏的高度20px,会导致启动页上这张图片会比引导页上的图片偏上20px.如下图,为了解决上面的问题,我们还需要将UIView的顶部约束添加为20px. 图中,红色区域部分将会在iPhone X以下的设备消失。
2024-02-20 23:26:04 372
原创 [Swift]定义一个全局的可管理的计时器
这种全局计时器,我们经常会用到。比如需要延迟10秒弹出系统好评弹窗,但又不希望在“订阅页”弹窗。这时我们进入“订阅页”时就要暂停定时器,离开“订阅页”时再恢复计时。定义一个全局计时器,延迟执行操作。可以对计时器进行全局控制,能手动控制暂停/重启/停止,并在计时结束后释放掉计时器。
2024-02-20 22:00:26 392
原创 [SwiftUI]使用Path绘制各种图形
用直线绘制一个矩形的三条边,然后最后一条边用圆形曲线去绘制,然后填充整个图形。// 定义矩形的起点// 绘制矩形的顶部边// 绘制矩形的右侧边// 绘制矩形的底部边(只绘制一部分,为了圆弧留出空间)// 添加圆形曲线作为最后一条边// 圆心最右测为0度或360度,最左侧为180度,最下侧为90度,最上侧为270度或-90度// clockwise true:逆时针绘制 false:顺时针绘制// 回到起点闭合路径.fill(Color.blue) // 填充路径。
2024-02-02 13:51:18 773
原创 [SwiftUI]本地通知
使用本地通知,在开关开启时请求权限,若通知权限是拒绝状态就弹窗通知去设置开启。先创建一个通知管理器,请求通知权限、检查通知权限 和 创建通知内容。状态为true时,随后调度通知,只有在权限开启时APP才能收到通知。注意,APP进入后台或者杀掉APP都能收到推送通知信息。
2024-02-02 12:29:10 358
原创 [SwiftUI]APP评分
以前都是直接使用SKStoreReviewController.requestReview(),不过现在报警告了。虽然警告,但在高版本上现在使用还是有效的,就怕以后突然某个版本完全失效了。方法已经被弃用,苹果推荐开发者使用新的 App Store Review API 来提示用户进行评分。新的 API 要求你在。从 iOS 14 开始,
2024-02-02 11:20:17 213
原创 [SwiftUI]使用UIActivityViewController来实现系统分享功能
来实现系统分享功能。由于 SwiftUI 目前没有直接提供类似的视图或修饰符,你需要使用。协议来创建一个可以在 SwiftUI 视图中使用的。接下来,在你的 SwiftUI 视图中,你可以使用。在 SwiftUI 中,你可以使用。注意,你要分享的内容应该是能够被。首先,你需要创建一个遵循。协议的结构体,用于包装。
2024-02-02 10:39:56 186
原创 [SwiftUI]页面跳转
你可以创建一个自定义的触发器,例如一个自定义的视图,当点击时,展示 Sheet。}) {自定义TabView的样式,比如修改标签栏的背景色、字体颜色等。通过直接访问UITabBar的appearance方法来改变标签栏的背景色。这种方法适用于更改全局的样式,但需要注意这种更改影响到整个 app 的TabView样式。init() {// 自定义 TabBar 的样式TabView {Text("首页").tabItem {Text("首页")Text("设置").tabItem {
2024-01-28 16:48:20 1258
原创 [SwiftUI]设置启动图
新建了一个SwiftUI工程,工程目录如下。默认目录中移除了LaunchScreen.storyboard,想着Apple肯定有设置启动图的替代方案了,就找了一半天。先说结果,新方案有Bug,还是得使用LaunchScreen.storyboard的方式设置启动图。
2024-01-27 23:38:16 404
原创 [SwiftUI]系统弹窗和自定义弹窗
OverlayOverlay是一个视图修饰符,它可以用来在现有视图上层添加一个新的视图层。// 弹窗的显示状态VStack {// 主视图内容// 在这里使用 .overlay 添加弹窗.overlay(// 判断是否显示弹窗// 弹窗的视图VStack {Spacer()// 弹窗内容VStack {.padding().padding()Spacer()// 背景遮罩ZStack是一个用来叠加视图的容器,它可以让你在同一个屏幕坐标空间中放置多个视图。当你使用。
2024-01-27 22:14:47 1300
原创 [SwiftUI]自定义Loading和Toast
如图,自定义耗时加载转圈等待和Toast文本提示,以及弹出动画。自定义比较简单,自己按需写一套就不用去导入相关的第三方库了。代码如下。
2024-01-26 23:25:45 602
原创 [SwiftUI]Text对字符串中部分字符改变颜色和字体
实例都保持其自己的样式设置。这种方式可以正常编译并运行,同时支持文本换行。在 SwiftUI 中合并带有不同样式的文本,应该使用不同的。如图,需要对字符串中部分字符改变颜色和字体。实例并将它们合并起来。运算符合并起来,每个。
2024-01-26 22:35:53 213
原创 [SwiftUI]Text使用自定义字体
在 SwiftUI 中,要使用自定义字体,您需要首先确保字体文件已经被正确添加到您的项目中,并且在项目的 Info.plist 文件中注册了字体。2.确保在添加字体时选择了 "Copy items if needed" 选项,并且字体文件已经被添加到了应用的 target。要获取正确的 PostScript 名称,您可以在 macOS 的字体册应用中打开字体文件,然后查看字体的信息。在这个数组中,添加你的字体文件的名称,包括其扩展名,例如。4.在你的 SwiftUI 视图中,使用。文件中,添加一个新条目。
2024-01-26 16:33:52 318
原创 [SwiftUI]修改状态栏文字颜色
UIStatusBarStyle设置为Light Content后,APP的状态栏字体颜色仍然是黑色没变成白色。这种方式有个问题,改成深色模式后将完全改变当前页面的配色方案,会导致开发者去为更多的内容适配深色模式。,这允许每个视图控制器控制自己的状态栏样式。:尝试在顶层视图中指定颜色方案,例如,使用。可以让状态栏变为白色。
2024-01-26 15:11:13 243
原创 [SwiftUI]TextEditor自动弹出关闭键盘以及不让键盘遮挡编辑区域
代码如下,就这样点击按钮弹出一个编辑页面。编辑页面,主要就自定义导航栏和编辑器TextEditor。编辑页面,主要就自定义导航栏和编辑器TextEditor。1.避免导航被遮挡和键盘遮挡编辑区域要想让TextEditor编辑时,页面不上移遮挡住导航栏,并且键盘不遮挡住输入框,我们需要将TextEditor放在滚动视图ScrollView中。注意:不要使用.edgesIgnoringSafeArea修饰符,忽略安全区域后TextEditor在编辑时,键盘不会自动将ScrollView撑高,这样键盘
2024-01-24 16:41:23 410
原创 [Error]SDK does not contain ‘libarclite‘ at the path ; try increasing the minimum deployment target
项目运行时报错报错:Build target FMDB of project Pods with configuration Debug/Users/quark/Documents/ati-teas-prep/Pods/Pods.xcodeproj: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment
2024-01-24 12:19:32 774
原创 [SwiftUI]@Binding可选对象如何传值
在 SwiftUI 中,您不能直接将 nil 传递给 @Binding 参数,因为 nil 不是一个 Binding 类型。@Binding 要求的是一个绑定到某个值的引用,即使这个值是可选的。如果你将非空对象绑定过去,会报错:Cannot convert value of type 'Binding' to expected argument type 'Binding
2024-01-23 13:39:03 403
原创 [SwiftUI].sheet(isPresented:content:)中为页面绑定数组中的对象出现数据错误的问题
具体来说,我点击按钮绑定对象,第一次打印editRow=1,但是弹出页面绑定的数据却是“0”。从第二次点击开始绑定就正常了, 打印什么弹出页面绑定的就是什么。使用.sheet(item:content:)可以解决数据不实时的问题。提取出来的代码如下,今天我开发时发现了这个问题。就算是延迟弹窗,第一次仍然会绑定错误。
2024-01-23 00:02:49 367
原创 [SwiftUI]删除Binding数组中最后一条数据时报错Swift/ContiguousArrayBuffer.swift:600: Fatal error: Index out of range
如果数据源在视图更新期间改变了,那么 SwiftUI 可能会尝试访问一个已经不存在的索引,从而导致崩溃。当数组被修改(比如删除了最后一个元素)时,如果你试图用一个已经不存在的索引去访问数组,就会出现"Index out of range"的错误。在拥有删除功能时,不要用索引去获取数组中的对象进行绑定。是获取数组中符合特定条件的元素索引的最简洁和最直观的方法。但是,根据不同的场景和性能要求,其他方法也可能会有所帮助。为了提高效率,如果你的数组很大,你可以使用。是安全的,也就是说,它会根据。
2024-01-22 14:07:38 374
原创 [SwiftUI]自定义滚动菜单栏进行PageView页面切换
只需使用ScrollViewReader包裹ScrollView,然后在ScrollView添加onChange中指定元素居中。基础实现代码如下,点击菜单和滚动页面进行翻页都能正常工作,见示意图。上面的效果比较差,下面进一步优化,为菜单栏选中按钮添加跟随效果。先从左到右点击菜单栏中的按钮,然后在从右到左滑动内容进行翻页。先从左到右点击菜单栏中的按钮,然后在从右到左滑动内容进行翻页。如图,自定义一个菜单栏,要求点击菜单按钮和滚动翻页步调统一。
2024-01-21 17:45:42 471
原创 [Error]Swift方法中修改传参对象报错Left side of mutating operator isn‘t mutable: ‘question‘ is a ‘let‘ constant
你可以通过将参数定义为inout来实现这一点,这样就可以从函数内部修改参数的值,并且修改会反映到函数外部。代码如下,QuestionExModel是结构体,在方法中更新对象中的参数会报错Left side of mutating operator isn't mutable: 'question' is a 'let' constant。如果真的需要在闭包中修改 question,通常的做法是使用一个完成处理器(completion handler),这样可以在闭包执行完成后返回修改后的结果。
2024-01-18 13:20:31 392
原创 [SwiftUI]HStack中放多个Picker不平分区域以及Picker在父视图之外还能滚动问题的修复
这个问题,网上推荐给Picker添加.clipped()和.compositingGroup()修饰,以及给ZStack添加.contentShape(Rectangle()),但这些方式都没让我的问题得到解决。如上图,想要滚动左边第一个Picker实际却滚动了中间第二个Picker,想要滚动第二个picker实际却滚动了第三个picker。代码如下,给Picker限制宽度后,虽然修复了上面区域平分问题,但又产生了一个新问题(下面的问题二)。之内,这样它们将在隔离的滚动视图中,可能减少触摸事件的冲突。
2024-01-17 14:19:40 379
原创 [Error]连接iPhone调试时提示Failed to prepare the device for development.
Command+Shift+G进入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport目录。像我这种,网上没15.8,本地电脑中有15.0-15.7。就直接按照15.7-15.0的顺序,挨个复制一份然后改成15.8去试,这样就能解决问题。没对应版本时,直接下载一个低于当前的版本,然后重命名为15.8就可以了。添加版本支持后,不要忘了,要完全退出Xcode然后重启。
2024-01-17 10:30:40 638
原创 [SwiftUI]contentShape的用法
是一个修饰符,它用于定义视图可点击区域的形状。默认情况下,视图的可点击区域通常限于其可见内容的边界。但是,有时我们希望扩大或改变这个区域,例如在一个包含Spacer的HStack中,可能需要整个水平区域都能响应点击,即使其中有部分是看不见的空白空间。以下是。
2024-01-16 14:15:39 431
原创 [SwiftUI]HStack部分区域和Spacer所占区域无法响应点击问题
所占据的区域,都能响应点击事件,你可以使用。它只是一个会占据可用空间的透明视图。,则剩余的空间可能不会响应点击。可能没有足够的可点击区域。如果其内部的子视图没有占满。默认不接收点击事件。
2024-01-16 14:09:44 464
原创 [SwiftUI]List背景颜色与页面的背景颜色不一致的处理方式
如下代码,页面中一个Text紧跟一个List。我们会发现,当页面背景设置为某些颜色时,List的背景颜色与页面背景色不一致,见示意图。虽然List的背景颜色我们无法自由修改,但我们可以另辟蹊径,直接创建一个List来作为背景。下面将上面的VStack包装到一个ZStack,在其前面新添加一个List作为背景。上面这种效果,让人太难接受。
2024-01-09 23:32:51 441
GAAVPlayerViewControllerDemo.zip
2020-01-22
UIViewController+Present.zip
2019-11-01
NSString+FileSize.zip
2019-10-31
EmptyDataSet-demo.zip
2019-10-30
UIView+AZGradient.zip
2019-10-28
UIView+BorderLine.zip
2019-10-26
UITextView+Placeholder.zip
2019-10-26
GAEditDemo.zip
2019-07-16
GAHomeDemo.zip
2019-07-10
上传到阿里云OSS的图片处理
2019-01-23
从控制器中分离出View
2018-10-10
12.0 (16A366)
2018-09-28
MasonryDemo
2018-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人