![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Flutter
文章平均质量分 77
江上清风山间明月
当一个人持续不断的学习,成长,精进,自我超越的时候。能量就会变得越来越强,当能量越来越强的时候,所处的一切就会越来越好。这是一个人生不断向好的正循环。
展开
-
Flutter-Statewidget 创建State过程State<XXXX> createState() => _XXXXState()的解释
createState() 方法是 Flutter 中 StatefulWidget 类的重要方法之一,用于创建状态对象。状态对象负责管理 widget 的状态,对于构建复杂的 Flutter widget 至关重要。结束语Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!原创 2024-05-08 15:01:34 · 984 阅读 · 0 评论 -
Flutter开发Dart中的队列(Queue)
队列是一种重要的数据结构,可用于各种场景。Dart 提供了 Queue 类和 FixedLengthQueue 类来实现队列,并提供了丰富的操作方法。理解队列的基本概念及其应用对于编写高效的 Dart 程序至关重要。结束语Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!原创 2024-05-06 16:28:06 · 697 阅读 · 0 评论 -
State.initState() must be a void method without an `async` keyword错误解析
State.initState() 方法是 Flutter 中 StatefulWidget 类的生命周期方法之一,用于初始化小部件的状态。然而,initState() 方法不能是异步的,因为它必须在小部件的构建方法被调用之前完成。这是因为 initState() 方法是在主线程中调用的,而异步函数是在后台线程中执行的。然后,主线程会继续执行 initState() 方法的其余部分,并最终调用 build() 方法来构建小部件。然后,可以从 initState() 方法中调用该单独的方法。原创 2024-04-28 16:46:02 · 1204 阅读 · 0 评论 -
Flutter应用开发-几种保存简单配置的方式
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。hive 是一个高性能的 NoSQL 数据库,支持存储各种类型的数据,包括基本数据类型、自定义对象、List、Map 等。如果需要存储少量简单数据,可以使用 shared_preferences。如果需要存储大量数据或非结构化数据,可以使用文件存储的方式。如果需要存储大量数据或非结构化数据,可以使用文件存储。如果需要高性能的存储解决方案,可以使用 hive。原创 2024-04-28 11:25:42 · 1023 阅读 · 0 评论 -
Flutter开发好用插件url_launcher详解-启动 URL
url_launcher 是一个 Flutter 插件,用于启动 URL。它支持网络、电话、短信和电子邮件方案。您可以使用它从您的 Flutter 应用程序中打开网站、拨打号码、发送短信或撰写电子邮件。您可以使用 canLaunchUrl() 函数检查 URL 是否可以启动。该函数接受一个字符串参数,该字符串是您要启动的 URL。// 检查网站是否可以启动} else {// 网站无法启动// 检查电话号码是否可以启动} else {// 电话号码无法启动。原创 2024-04-25 18:08:14 · 1921 阅读 · 0 评论 -
Flutter中setState函数的使用注意事项
使用setState()回调函数。build()方法是用于构建小部件的方法,您不应该在其中使用setState()方法。setState()函数是Flutter中非常重要的一个函数,它用于更新小部件的状态,并通知Flutter框架重新构建小部件。如果您需要在多个小部件之间共享状态,可以将状态提升到它们的共同父级,并使用回调函数来更新状态,而不是手动调用setState()方法。例如,如果您只在状态发生变化时才需要更新小部件,可以使用条件判断来避免在状态未发生变化时调用setState()方法。原创 2024-04-03 17:09:11 · 1325 阅读 · 0 评论 -
Android和IOS应用开发-Flutter应用让屏幕在 app 运行期间保持常亮的方法
Flutter 社区中已经有很多相关插件可供使用,比如 wakelock: https://pub.dev/packages/wakelock。Flutter 中的 Widgets 也提供了控制屏幕常亮的功能。在使用上述方法时,需要考虑用户体验。例如,在播放视频时需要保持屏幕常亮,但在其他情况下,可以让屏幕自动关闭以节省电量。使用 Widgets 方法时,需要确保页面类混入了 AutomaticKeepAliveClientMixin。使用上述两种方法中的任意一种,都可以在 app 运行期间保持屏幕常亮。原创 2024-03-28 15:23:48 · 1141 阅读 · 0 评论 -
Android和IOS Flutter应用开发使用 Provider.of 时,可以使用 listen: false 来避免不必要的重建
当您使用 Provider.of 获取状态对象时,默认情况下,该对象每次发生变化时都会触发重建该对象所在的组件。设置 listen: false 告诉 Provider.of 不要在状态对象变化时重建组件。使用 Provider.of 时,可以设置 listen: false 来避免不必要的重建,这可以提高性能并避免不必要的 UI闪烁。使用 Provider.of 时,可以使用 listen: false 来避免不必要的重建。仅在您确定组件不需要每次状态对象变化时重建时才使用 listen: false。原创 2024-03-19 11:06:17 · 1181 阅读 · 3 评论 -
Error: Could not find the correct Provider<AppState> above this ConfigsPage Widget
Provider 是 Flutter 中流行的状态管理库,它允许您在应用程序的不同部分共享数据。原创 2024-03-19 10:56:03 · 740 阅读 · 0 评论 -
Android和IOS应用开发-Flutter 应用中实现记录和使用全局状态的几种方法
BLoC 代表 Business Logic Component,是一种用于分离业务逻辑和 UI 的设计模式。Provider 是 Flutter 中流行的状态管理库,它可以方便地在多个页面之间共享数据。GetX 是另一个流行的状态管理库,它提供了一种简单的方式来管理全局状态和路由。原创 2024-03-15 13:41:04 · 1860 阅读 · 17 评论 -
Flutter可重排的列表控件ReorderableListView详解
ReorderableListView 是 Flutter 中一个可重排的列表控件,允许用户通过拖动来改变列表项的顺序。它继承自 ListView,并提供了一些额外的功能来实现重排功能。原创 2024-03-11 15:40:51 · 902 阅读 · 0 评论 -
Android应用开发-Flutter的LongPressDraggable控件回调函数onDraggableCanceled使用
确保你的 onDraggableCanceled 回调没有返回 null,因为如果返回 null,它可能导致 onDragEnd 也不被调用。LongPressDraggable 的 onDraggableCanceled 回调在拖动被取消时触发。拖动可能会被取消,例如用户在拖动开始后移动了太快或在放置之前取消了拖动。这个回调通常用于在拖动被取消时执行一些清理工作或展示一些反馈。例如,你可能想要将拖动对象返回到原始位置,或者显示一个提示,告诉用户拖动已经取消。原创 2024-03-04 13:36:57 · 583 阅读 · 0 评论 -
Flutter修改了函数申明后hotload会失效
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。当您修改函数声明时,会改变函数的签名,这会导致注入的新代码与运行中的应用程序不兼容。使用 @immutable 注释: 如果您修改的函数声明只是添加了可选参数,可以使用 @immutable 注释来标记该函数,这样 Hot Reload 功能就可以继续工作。在 Flutter 开发中,如果修改了函数的声明,Hot Reload 功能通常不能正常使用,需要重新编译。原创 2024-03-01 15:07:52 · 403 阅读 · 1 评论 -
Flutter开发LongPressDraggable、Draggable 的onDragEnd没有被调用
拖动对象没有成功放置到接受的 DragTarget 区域: 如果拖动对象被拖动到 DragTarget 区域但未成功放置,onDragEnd 可能不会被调用。拖动到不接受的 DragTarget 区域(Drop 结束): 如果拖动的小部件被拖动到一个不接受的 DragTarget 区域并且没有放置,同样会触发 onDragEnd,但此时 details.wasAccepted 为 false。在拖动期间发生错误: 如果在拖动对象被拖动时发生错误,可能会影响 onDragEnd 的触发。原创 2024-02-22 18:02:45 · 661 阅读 · 1 评论 -
Android-Flutter开发LongPressDraggable详细介绍
LongPressDraggable 是 Flutter 提供的一个用于实现长按并拖动的小部件。它允许用户通过长按一个小部件来触发拖动操作。原创 2024-01-15 16:29:47 · 832 阅读 · 6 评论 -
Flutter使用stack来实现悬浮UI
在这个例子中,MyFloatingUI是一个StatefulWidget,它包含一个Stack,其中包括了一个主要的内容(Text)和一个悬浮的按钮(FloatingActionButton)。在这个例子中,isFloatingUIVisible为true时悬浮按钮可见,为false时不可见。在Flutter中,你可以使用Stack和Positioned来创建悬浮 UI。Stack允许你将多个小部件叠放在一起,而Positioned则用于定位小部件在Stack中的位置。原创 2024-01-10 10:43:28 · 1492 阅读 · 10 评论 -
Android开发Flutter使用SharedPreferences示例
在Flutter中,你可以使用shared_preferences插件来实现类似Android原生开发中的SharedPreferences功能,用于在应用程序中保存和检索持久化的键值对。在这个例子中,我们使用了shared_preferences插件来保存一个简单的字符串值。你可以根据需要保存和检索更多的数据类型。确保根据你的应用程序需求适配数据类型。Android原生开发经常会用SharedPreferences来保存一些设置,Flutter用什么来保存这些设置呢?原创 2024-01-09 11:27:30 · 543 阅读 · 3 评论 -
Flutter中(){}和()=>{}的细微区别
在你的情况下,由于setState只有一行语句,你可以选择使用箭头函数形式,使代码更加简洁。()=> 箭头函数 (Arrow function): 这是一种简写形式,适用于只有一条语句的函数体。在Dart语言中,=>符号是箭头语法的一部分,它用于创建单行函数或表达式的缩写。在你的两个例子中,使用()=>和(){}都是合法的,但有细微的区别。(){} 匿名函数 (Anonymous function): 这是传统的函数声明形式,适用于多行函数体或需要执行多个语句的情况。原创 2023-12-27 15:09:47 · 1464 阅读 · 8 评论 -
Android应用-flutter使用Positioned将控件定位到底部中间
要将Positioned定位到屏幕底部中间的位置,你可以使用MediaQuery来获取屏幕的高度,然后设置Positioned的bottom属性和left或right属性,一般我们left和right都会设置一个值让控制置于合适的位置,那么如何使其位于底部中央?在这个例子中,Positioned包含一个具有蓝色背景的Container,该Container位于屏幕的底部中央。bottom: 0确保它位于屏幕底部,而left: 0和right: 0使其水平方向上充满整个屏幕宽度。原创 2023-12-20 17:44:08 · 1737 阅读 · 11 评论 -
Android应用-Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解
Dismissible 是 Flutter 中用于实现可滑动删除或拖拽操作的一个有用的小部件。主要用于在用户对列表项或任何其他可滑动的元素执行删除或拖动操作时,提供一种简便的实现方式。原创 2023-12-20 14:32:45 · 2425 阅读 · 21 评论 -
Flutter使用fluro时报错type ‘String‘ is not a subtype of type ‘Queue<Task>‘
在使用 Fluro 进行导航时,路由的参数是以字符串的形式进行传递的。如果你希望传递一个 Queue 类型的参数,你需要在传递时进行序列化(将其转换为字符串),并在接收时进行反序列化(将字符串转换回对象)。请注意,上述代码中的 Task 类需要实现 toJson 和 fromJson 方法,以便在序列化和反序列化过程中进行转换。这样,你就可以在 Fluro 中传递 Queue 类型的参数了。使用fluro时报错type ‘String’ is not a subtype of type ‘Queue’原创 2023-12-13 16:30:50 · 850 阅读 · 4 评论 -
Android应用-Flutter实现Android拖动到垃圾桶删除效果-Draggable和DragTarget的详细讲解
Draggable是Flutter框架中的一个小部件,用于支持用户通过手势拖动一个子部件。它是基于手势的一种方式,可以使用户可以在屏幕上拖动指定的部件。DragTarget 是 Flutter 框架中的一个小部件,用于接收拖动操作并处理拖动过程中传递的数据。它是与 Draggable 配合使用的一种方式,允许你指定拖动对象应该如何被接收和处理。原创 2023-12-13 11:04:56 · 2237 阅读 · 29 评论 -
flutter的ListView和SingleChildScrollView有什么区别?他们的使用场景有什么不一样?
ListView和SingleChildScrollView都是在Flutter中用于处理滚动内容的组件,但它们有一些关键的区别。原创 2023-12-12 13:52:02 · 1029 阅读 · 3 评论 -
Flutter的BuildContext简介
BuildContext是Flutter中的一个重要概念,表示当前Widget在树中的位置上下文。它是一个对Widget树的一个位置的引用,用于查找、访问和操作该位置上的相关信息。每个Widget都有一个关联的BuildContext,它指示了该Widget在树中的位置。在Flutter中,Widget树是由许多嵌套的Widget组成的,每个Widget都可能包含其他Widget。原创 2023-12-12 13:50:22 · 823 阅读 · 0 评论 -
flutter开发警告This class (or a class that this class inherits from) is marked as ‘@immutable‘, but one
在Dart中,如果你使用了 @immutable 注解,它要求类的所有实例字段都应该是 final 的,以确保对象的不可变性。不可变对象的创建和管理有助于编写更加可靠和可维护的代码。添加了 final 修饰符来修复 SerialsTimer 类中的 tasks 字段。这样,该类就符合 @immutable 的要求了。这个警告是因为在一个被标记为 @immutable(不可变)的类中,其中的某个实例字段(成员变量)没有被声明为 final。Dart推断出你写的这个类是一个@immutable(不可变)的类。原创 2023-12-06 15:55:36 · 1737 阅读 · 8 评论 -
Flutter页面刷新失败?看看是不是这个原因
我用flutter开发了一个页面,页面上有一些自己写的控件A,A控件里有一个button,我点击这个A控件里的button的时候,直接在onPressed里调用setState发现页面并没有刷新。原创 2023-12-01 10:44:38 · 2237 阅读 · 32 评论 -
Flutter开发type ‘Future<int>‘ is not a subtype of type ‘int‘ in type cast错误
类型“Future<int>”不是类型强制转换中类型“int”的子类型。这里不能强制转换,要拿到DatabaseHelper.dbhelper.getTaskGroupRelationOrde()返回结果可以使用DatabaseHelper.dbhelper.getTaskGroupRelationOrder().then((value) =>{})今天调试flutter程序时报错。原创 2023-11-28 15:23:38 · 1007 阅读 · 4 评论 -
Flutter开发警告Constructors in ‘@immutable‘ classes should be declared as ‘const‘
这个警告是由于在Flutter中,如果你定义的类是不可变的额,你最好用@immutable注解标记标记下,即使你不标记,代码检测也会检测出来。在某些情况下,这可能是因为Flutter无法确定对象是否是不可变的,因此它会发出警告,以提醒你可能需要将构造函数声明为const。在Dart中,const构造函数表示该构造函数创建的对象是不可变的,这样的对象可以在编译时进行常量折叠,从而提高性能。当你标记一个类为@immutable时,Flutter希望你的构造函数也是const的,以确保对象的不可变性。原创 2023-11-24 14:32:24 · 1104 阅读 · 1 评论 -
Flutter应用-使用sqflite升级数据库
数据库迁移和备份是一项复杂的任务,需要仔细考虑数据库结构的变化以及如何保留和转移数据。原创 2023-11-16 13:52:58 · 3819 阅读 · 68 评论 -
Dart利用私有构造函数_()创建单例模式
构造函数的名称通常与类名相同,这是 Dart 中的一种约定。但如果你愿意,你可以为构造函数取一个不同的名字,只要没有指定返回类型,它仍然是构造函数。在Dart中,如果你定义一个没有显示构造函数的类,Dart会为你生成一个默认的无参构造函数。然而,当你定义了任何构造函数时(无论是否有参数),Dart将不再提供默认构造函数。在你的代码中,DatabaseHelper._();是一个私有的构造函数,它没有参数,因此它是一个无参构造函数。当你创建一个类的实例时,Dart会调用这个构造函数。// 单例模式。原创 2023-11-14 13:53:59 · 596 阅读 · 2 评论 -
Flutter利用GridView创建网格布局实现优美布局
GridView 是 Flutter 中用于创建网格布局的强大小部件。它允许你在行和列中排列子小部件,非常适合显示大量项目,例如图像、文本、卡片等。GridView 持许多其他配置选项,如滚动方向、内容填充、滚动控制等。你可以根据你的应用需求进行进一步的定制。总的来说,GridView 是一个非常灵活且强大的小部件,可用于创建各种网格布局。结束语Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。原创 2023-11-07 10:14:10 · 1432 阅读 · 40 评论 -
flutter开发报错The instance member ‘widget‘ can‘t be accessed in an initializer
The instance member ‘widget’ can’t be accessed in an initializer” 错误是因为在初始化器列表中(constructor initializer list)访问了 widget 成员。这是因为在构造函数的初始化器列表中,对象的属性(包括 widget)还没有被初始化,因此不能在这里访问它们。这一句增加一个late修饰符。原创 2023-11-06 09:06:20 · 1317 阅读 · 8 评论 -
flutter开发报错RenderFlex children have non-zero flex but incoming height constraints are unbounded.
RenderFlex children have non-zero flex but incoming height constraints are unbounded.” 错误通常是因为在使用 Flex 布局(例如 Column、Row 或 Flex)时,子部件的某些子部件具有非零的 flex 值,但上级容器没有限制子部件的高度,因此出现了布局约束冲突。为子部件设置高度限制:在上级容器中,为子部件设置高度限制,以确保子部件不会无限制地扩展。原创 2023-11-06 09:04:15 · 2017 阅读 · 22 评论 -
Flutter的The file name ‘xxxx.dart‘ isn‘t a snake_case identifier警告
如果你的文件名不符合 “snake_case” 规则,Dart 会生成这样的警告,提醒你遵循命名约定,以便代码更易维护和协作。在使用 Dart 开发 Flutter 应用时,有一些常见的命名规则和最佳实践,以帮助代码更具可读性和一致性。使用小写字母和下划线:Dart 通常使用小写字母和下划线 _ 来命名变量和函数,例如 my_variable。保持一致的命名约定:在整个应用或项目中,遵循一致的命名约定是非常重要的,以确保代码的可维护性和可读性。使用有意义的注释:在代码中使用注释来解释重要逻辑和功能。原创 2023-10-27 09:07:33 · 1464 阅读 · 28 评论 -
Flutter报错RenderBox was not laid out: RenderRepaintBoundary的解决方法
因为当使用Column时,它会尝试处于屏幕高度,而当在内部使用Expanded时,该列会将剩余空间分配给扩展小部件的子级,现在,如果你使用SingleChildScrollView,它会尽可能长时间地扩展(按方向,一般时垂直方向),但当你使用Expanded时,它会试图占用剩余空间,所以它会无限大,从而引发错误,如果你在Column中使用Expanded,而这个Column具有父级SingleChildScrollView就报这个错误。原创 2023-10-26 08:54:46 · 2809 阅读 · 31 评论 -
Flutter页面滑动回调处理解决方法
TabBarView 是 Flutter 中的一个用于显示选项卡视图的小部件。它通常与 TabBar 一起使用,用于实现选项卡式导航,允许用户在不同的选项卡之间切换内容。基本用法: TabBarView 允许你在不同的选项卡之间切换内容。它接受一个 controller 属性,用于控制选项卡的切换。通常,你会将 TabController 与 TabBar 共享,以便它们可以保持同步。// 在 TabBar 和 TabBarView 中使用相同的 controllerTabBar(tabs: [原创 2023-10-24 11:10:16 · 1318 阅读 · 29 评论 -
Flutter的Don‘t use ‘BuildContext‘s across async gaps警告解决方法
BuildContext 和 Context 都代表了小部件树中的位置和上下文信息,它们在构建和交互中扮演着关键的角色,但它们实际上是相同的概念的不同表达方式。“不要在异步间隙(async gaps)中使用 BuildContext” 是一个Flutter中的常见警告消息,通常表示你正在尝试在异步操作中访问 BuildContext,这是一个不推荐的做法,因为它可能引发不确定的行为或错误。构建小部件:BuildContext 是在小部件的 build 方法中传递的,它告诉小部件在小部件树中的位置。原创 2023-10-22 10:42:28 · 4636 阅读 · 33 评论 -
Flutter的Invalid use of a private type in a public API警告
自己在写Flutter 应用时发现了一个Invalid use of a private type in a public API警告。发现很多官方的例子也有这个问题。在公共API中使用私有类型无效。原创 2023-10-20 09:04:48 · 1337 阅读 · 1 评论 -
Android Studio快速实现Flutter应用的国际化和多语言支持
使用Intl包中的Intl.systemLocale属性来获取当前的系统语言,并使用Intl.defaultLocale属性来设置应用的语言。你可以根据你的应用需求和支持的语言进行调整。确保创建相应的.arb文件,并在应用中正确使用Localizations.of(context)来获取翻译消息。首先,你需要添加flutter_localizations依赖库到你的pubspec.yaml文件中。最后,运行你的Flutter应用,你应该能够看到应用根据系统语言或用户选择的语言显示不同的翻译消息。原创 2023-10-19 09:46:37 · 1836 阅读 · 11 评论 -
Flutter的Platform介绍-跨平台开发,如何根据不同平台创建不同UI和行为
Flutter 平台(Platform)是一个概念,用于描述 Flutter 框架在不同操作系统(如Android、iOS、Web、macOS、Windows等)上运行时的适应性和支持。Flutter 旨在实现跨平台开发,使开发人员能够使用单一代码库构建应用程序,然后在多个平台上运行,而无需编写平台特定的代码。Flutter 中的 Platform 类提供了有关当前平台的信息,允许开发人员在跨平台应用程序中执行平台相关的操作。这个类位于 dart:io 包中。原创 2023-10-10 11:05:12 · 2436 阅读 · 41 评论