自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卓原的进化之旅

活到老,学到老

  • 博客(132)
  • 资源 (5)
  • 收藏
  • 关注

原创 【无标题】

可以直接复制到 https://dartpad.dev/ 中浏览效果。Flutter翻转动画。

2023-11-01 15:22:26 101

原创 flutter : 一篇文章入门go_router

go_router是Flutter官方开发的一个Flutter的声明式路由包。go_router 包的目的是使用声明式路由来降低复杂性,无论您的目标平台是什么(移动、Web、桌面),处理来自 Android、iOS 和网络的深度和动态链接,以及其他一些导航相关的场景,同时希望提供易于使用的开发人员体验。

2022-10-13 19:36:12 5027 1

原创 Flutter Key的原理和使用(五) 需要key的实例:可拖动改变顺序的Listview

Flutter Key的原理和使用(一) 没有Key会发生什么Flutter Key的原理和使用(二) Widget 和 Element 的对应关系Flutter Key的原理和使用(三) LocalKey的三种类型Flutter Key的原理和使用(四) GlobalKey 的用法之前呢,我们介绍了flutter中的几种key,它们相应的原理和使用方式, 这次就来复习一下,看看一个需要用到key的实例.ReorderableListView你可能使用过ListView组件,它可以调整,显示和滚

2021-09-07 14:04:34 1517

原创 Flutter Key的原理和使用(四) GlobalKey 的用法

Flutter Key的原理和使用(一) 没有Key会发生什么Flutter Key的原理和使用 (二) Widget 和 Element 的对应关系Flutter Key的原理和使用(三) LocalKey的三种类型上一章,因为标题的原因哈,没有介绍到关于GlobalKey的内容,今天来讲一讲GlobalKey.GlobalKey是在整个应用程序中唯一的键。我们之前讲到,LocalKey是局部键,所以出现层级改变的时候:Column( children: [ Box(Color

2021-09-06 18:20:48 5111

原创 Flutter Key的原理和使用(三) LocalKey的三种类型

我们在上一章说到,同一级中相同类型的Widget不给它传Key的话,Flutter有时候就会出现分不清它们之间的对应关系,尤其是Widget之间的顺序发生改变的时候. 此时,我们就需要传个key给它.Key的种类Key有两个子类:LocalKey 局部键,在同一级中要唯一,可以理解为同级唯一性GlobalKey 全局键 , 在整个App中必须是唯一的.从性能上来讲,如果不需要用到GlobalKey的话,尽量不用,LocalKey因为只对比同一级别,因此会快很多.上一章也说过,在父级或者子级是不

2021-09-03 15:30:30 1197

原创 Flutter Key的原理和使用 (二) Widget 和 Element 的对应关系

Flutter Key的原理和使用(一) 没有Key会发生什么上一篇文章中,我们遇到了一个问题 , widget换位置的时候,出现了一些意外,并没有按照我们所想去调换位置, 这时候我们就很困惑, 那是在我们看来,写了一个widget,那这个widget就该按照我们设定的那样展示, 但实际上, widget并不是最终出现在屏幕上的东西.Widget Tree可能有人听说过Widget Tree , 就是嵌套着widget的东西.比如现在这段代码:Column( children: [ B

2021-09-02 11:04:50 936

原创 Flutter Key的原理和使用(一) 没有Key会发生什么

在flutter中,几乎每个widget都有一个Key,但是我们使用的时候一般不会传Key , 那么这个Key,它到底是干什么用的呢? 几乎每个widget都有,但我们又很少用到它. 那到底什么时候才需要用呢?接下来,我们看一下,在需要Key的时候不用key,会发生什么情况.先举个常见的例子:Column( children: [ Container(width: 100, height: 100,color: Colors.red), Container(width: 100,

2021-09-01 10:27:30 1308

原创 Flutter空安全相关操作符

健全的空安全已在 Dart 2.12 和 Flutter 2 中可用需知当你选择使用空安全时,代码中的类型将默认是非空的,意味着 除非你声明它们可空,它们的值都不能为空。有了空安全,原本处于你的 运行时 的空值引用错误将变为 编辑时 的分析错误。? 允许变量为nullint a = null;一般来说,int类型的变量无法赋值为null , 在加入空安全后,编译器会报错。若你想让变量可以为 null,只需要在类型声明后加上 ?。int? aNullableInt = null;String

2021-07-12 14:12:40 2189 2

原创 Flutter Provider Selector

Selector 源码:class Selector<A, S> extends Selector0<S> { /// {@macro provider.selector} Selector({ Key? key, required ValueWidgetBuilder<S> builder, required S Function(BuildContext, A) selector, ShouldRebuild<S>

2021-06-24 00:40:47 1163

原创 flutter_bloc使用及部分源码分析

flutter_bloc 是一个bloc第三方库,这个库很方便的让你集成bloc模式,这个库结合了RXDart。目前我们项目中就有用到rxdart。bloc模式BLoC是一种利用reactive programming方式构建应用的方法,这是一个由流构成的完全异步的世界。常用的概念简介reactive programming: 响应式编程 , 一种基于事件模式的模型。Stream:流是一系列异步的数据.。Observable实现并扩展了Stream。它将常用的stream和strea

2021-01-19 15:45:41 883 1

原创 解决flutter 引入的package国际化无效的问题

解决flutter intl 引入的库内国际化失效的问题问题发生场景你引入了几个module,这几个module分别做了国际化,例如以下4个module ABCD,最后发现只有A的国际化效果可以使用,其他module无效:localizationsDelegates: const [ moduleA.S.delegate, moduleB.S.delegate, moduleC.S.delegate, moduleD.S.

2020-12-14 16:30:03 2871

原创 Flutter Firebase - FlutterFire基础配置

Flutter集成FirebaseFlutterFire是一套Flutter插件,可将Flutter应用程序连接到Firebase。首先要创建一个Firebase项目这一步跟这Firebase的流程走就可以Android安装在Android上使用FlutterFire之前,必须首先使用Android应用程序连接到Firebase项目。生成Firebase项目配置文件在Firebase控制台上,为您的Firebase项目添加一个新的Android应用程序或选择一个现有的Android应用程序。

2020-12-08 17:44:33 1948

原创 Flutter FCM - Flutter集成Firebase Cloud Messaging(FCM)

Firebase Cloud MessagingFirebase Cloud Messaging(FCM)是一种跨平台的消息传递解决方案,可让您可靠地免费发送消息。使用FCM,您可以通知客户端应用程序可以同步新电子邮件或其他数据。您可以发送通知消息来推动用户的重新参与和保留。对于即时消息之类的用例,一条消息可以将最多4 KB的有效负载传输到客户端应用程序。以下内容基于flutter 1.22.4版本安装1.添加依赖项dependencies: flutter: sdk: flutte

2020-12-08 15:38:43 3156 5

原创 flutter 1.22版本@required被替换成了required

解决方法:将pubspec.yaml中的environment改为以下内容:environment: sdk: ">=2.10.1 <3.0.0"并重启ide即可。原因这个是最近空安全的修改。现在,required是dart 2.10中的关键字。如果flutter版本升级到1.22,dart版本会随之升级上来,所以正常运行没有错误,但是编译器会报错。...

2020-11-04 11:19:08 5115 1

原创 Flutter 代码混淆 混淆Dart代码

代码混淆Flutter的代码混淆flutter的代码混淆就是混淆dart代码。代码混淆是修改应用程序二进制文件的过程,以使人们更难以理解。混淆将函数名和类名隐藏在已编译的Dart代码中,从而使攻击者很难对您的专有应用程序进行反向工程。Flutter代码混淆的做法Flutter版本小于1.16Android将以下行添加到<ProjectRoot> /android/gradle.properties:extra-gen-snapshot-options=--obfuscate有

2020-10-23 15:39:02 5528 1

原创 flutter 分享到whatsapp

android无需额外配置ios:<key>LSApplicationQueriesSchemes</key><array> <string>whatsapp</string></array>flutter :需要 url_launcher_launchWhatsapp() async {const url = "https://wa.me/?text=Your Message here";var encod

2020-09-29 22:26:30 1044

原创 FractionallySizedBox 按比例设置Widget的尺寸

FractionallySizedBox 按比例设置Widget的尺寸有时候,应用的设计是按比例给出的,例如这样 : 按钮应该占应用宽度的70%这时可以使用FractionallySizedBox来实现.构造方法const FractionallySizedBox({ Key key, this.alignment = Alignment.center, this.widthFactor, this.heightFactor, Widget child,}) 我们先看一下

2020-08-22 15:53:52 1323

原创 Flutter国际化 多语言 使用Flutter intl插件实现多语言

准备工作搜索插件 : Flutter Intl项目配置添加依赖:dev_dependencies:... //add this flutter_localizations: sdk: flutter在菜单栏的Tool下找到Flutter Intl 并选择Initalize for the project, 配置结束后效果如下:会在 pubspec.yaml中增加以下字段flutter_intl: enabled: true会在lib目录下增加 g

2020-08-20 00:24:35 12662 10

原创 Flutte接入firebase messaging(FCM)

flutter接入firebase messaging其实文档说的还算比较详细,但有些东西没有更新,照着文档无法正常集成。pub地址使用添加依赖 # firebase firebase_messaging: ^6.0.16Android配置在firebase后台添加应用使用Firebase控制台将Android应用添加到您的项目中:跟随助手,下载生成的google-services.json文件,并将其放置在android / app中。dependencies {

2020-08-14 14:23:41 4181 6

原创 flutter textField设定高度后,文字无法居中

今天遇到了一个关于TextField的问题:如果给textField设定的布局高度小于它的默认高度,那么它的居中就会有问题.修改后的效果:代码:Container( color: Colors.black12, constraints: BoxConstraints(maxHeight: 30), child: TextField( textAlignVertical: TextAl

2020-08-08 00:59:02 7283

原创 Android View的绘制过程复习

Android View的绘制过程DecorView是一个应用窗口的根容器,它本质上是一个FrameLayout.DecorView有唯一一个子View,是一个垂直的LinearLayout,包含两个子元素:TitleView(ActionBar的容器) 和 ContentView(窗口内容的容器).ContentView是一个FrameLayout(android.R.id.content),我们平时用的setContentView就是设置它的子View.上图还表达了每个Activity都与一个

2020-06-26 11:56:18 597

原创 JVM复习总结

JVM运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。程序计数器内存空间小,线程私有.字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行指令的字节码指令(主要是取下一条指令的字节码文件).分支,循环,跳转,异常处理,线程恢复等基础功能都依赖程序计数器来完成.如果线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址 ;如果正在执行的是Native方法, 这个计数器记录的值为(U

2020-06-25 17:33:40 546

原创 初级排序算法

初级排序算法首先介绍两个概念:内部排序:排序工作能在内存中完成外部排序:数据量太大,不能在内存中完成而需要在磁盘上完成的排序选择排序找到数组中最小的元素将它和数组的第一个元素交换位置(如果第一个就是最小的,那么它就和自己交换)在剩下的元素中找到最小的元素,将它与数组第二个元素交换位置重复以上步骤,直到整个数组排序完成.特点:运行时间与输入无关数据移动是最少的时间复杂度:O(n2)空间复杂度:O(1) /** * 选择排序 *

2020-06-23 15:02:27 337 2

原创 二分查找法

二分查找法二分法就是一种在有序数组中查找某一特定元素的搜索算法搜索过程从数组的中间元素开始:如果中间元素正好是要查找的元素,则搜索过程结束如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半查找,而且和开始一样从中间元素开始比较如果在某一步骤数组为空,则代表元素找不到.复杂度算法步骤给定一个数组A,目标值为T,查找T在A中的位置令L为0,R为n-1.如果L>R,则搜索以失败告终令m(中间值元素)为"(L+R)/2".如果Am<T,令L为m+1,

2020-06-22 23:20:16 1918

原创 算法的时间复杂度

时间复杂度我们将算法执行运算的操作数丢弃掉低阶项,再去掉所有的系数.在它前面加上一个O,就是大O表示法.int n = 100;int a = 10;System.out.println(a);//总共执行3次没有更低阶的项了,系数是3, 去掉系数3, 所以时间复杂度是 O(1) int n = 100; int a = 10; for (int i = 0; i < n; i++) { //n次 System

2020-06-22 22:21:40 1016

原创 Flutter key

Flutter Key当widget在widget tree中移动时,key可以保留它的状态.key可用于保留用户的滚动位置,或在修改集合时保持状态.什么时候需要Key如果你还没有用过key,说明你可能还不需要使用key.事实也正是如此,大多数时候,我们不需要使用key.但是如果你发现自己需要添加,删除或重新排序处于某种状态的相同类型的widget的集合的时候,可能就是需要用到key的时候了.我们先用一个官方的例子来看一下key的作用 , 交换两个只有颜色不同的widgetclass Ke

2020-06-22 17:41:24 1437

原创 入门 Android Lint

Lint​ Android Lint 是Android Studio 在ADT(Android Developer Tools)16提供的代码扫描工具,可以帮助我们发现和更正代码结构质量的问题。系统会报告该工具检测到的每个问题并提供问题的描述消息和严重级别,以便快速确定需要优先进行的修改。此外,我们还可以通过降低问题的严重级别以忽略与项目无关的问题,或者提高严重级别以突出特定问题。优点无需实际执行应用不必编写测试用例Lint工作流下图显示了 lint 工具如何处理应用源文件。App

2020-06-18 22:29:39 2675

原创 Flutter 复习总结

WidgetWidget是不可变的.Widget 是 描述 Element的配置 , 告诉 Element 这个实例如何去渲染。Widget 和 Element 之间是一对多的关系 .每当Widget插入到树中,就会生成一个对应的Element.Widget 可能被复用到树的多个部分,对应产生多个 Element 对象。RenderObject RenderObject是渲染树中的对象,所以它才是实际的渲染对象RenderObject 涉及到布局、计算

2020-06-18 11:27:37 779

原创 通关Android Lint

施工中Lint​ Android Lint 是Android Studio 在ADT(Android Developer Tools)16提供的代码扫描工具,可以帮助我们发现和更正代码结构质量的问题。系统会报告该工具检测到的每个问题并提供问题的描述消息和严重级别,以便快速确定需要优先进行的修改。此外,我们还可以通过降低问题的严重级别以忽略与项目无关的问题,或者提高严重级别以突出特定问题。优点无需实际执行应用不必编写测试用例Lint工作流下图显示了 lint 工具如何处理应用源文件。[外

2020-06-10 13:08:56 1466

原创 typora + smss / github / 又拍云 / 七牛云 图床

配置文件如下:{ "picBed": { "current": "smms", "uploader": "smms", "smms": { "token": "你的token" }, "transformer": "path" }, "picgoPlugins": { "picgo-plugin-smms-user": true }}查看smss token设置完成后点击验证图片上传即可。...

2020-06-10 12:17:35 744

原创 Android BottomSheetDialogFragment 可随手势滑动关闭的底部弹窗

在APP开发中,经常会有一个需求:从底部弹出弹窗,并且可以跟随手指滑动关闭弹窗.简介BottomSheetDialogFragment是位于com.google.android.material包下的一个类.BottomSheetDialogFragment 继承自AppCompatDialogFragmentAppCompatDialogFragment继承自DialogFragme...

2020-03-31 17:55:51 6707 3

原创 集成FlutterBoost

在Flutter发布了1.12版本之后 , 在原生程序中集成flutter的方式也有了改变 , 于是重新走一遍流程.本次操作基于以下版本:Flutter 1.12.13+hotfix.5 • channel stableAndroid Studio 3.5.2Android集成Flutter的意义有时一次全部在Flutter中重写整个应用程序是不切实际的。在这种情况下,Flutter...

2020-01-03 14:29:58 2720

原创 Android LifeCycle监控生命周期

LifeCycle的作用是感知组件(Activity/Fragment)的生命周期 , 并在合适的生命周期执行分配的任务.1.监听组件生命后期假设我们此时有一个Util类,其中有两个方法需要分别在Activity的onStart和onDestory的时候执行,我们可以先让它实现LifecycleObserver:class LifecycleUtil : LifecycleObserver ...

2019-12-27 15:35:09 3629 1

原创 Android 监听键盘状态 获取键盘高度

Android暂时还没有提供一个合适的API来获取/监听键盘的状态和高度 , 而我们又经常会有这个需求.最近我的一个项目中,在ugc页面需要在键盘顶部,紧贴着键盘显示一个文字提示,当键盘消失时就隐藏.因此,我需要监听软键盘的打开/关闭 , 以及获取它的高度.ViewTreeObserverA view tree observer is used to register listeners...

2019-12-25 11:25:30 2608 1

原创 Android VideoView 视频播放器 仿抖音

前言最近项目有个需求 , 做个类似抖音的视频效果. 又因为包大小的问题不使用第三方SDK,所以使用原生的VideoView开发了一下, 搭配RecyclerView和PageSnapHelper来实现抖音的效果.全部代码: github看一下实现流程:首先创建了一个继承自ConstraintLayout的View,用来实现自己的布局.东西不多, 里面主要是播放控制的按钮, 和一个可以...

2019-11-27 15:57:40 6848 7

原创 Java 反射

JAVA反射机制JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。Java的反射机制允许编程人员在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制功能1、获得某个对象的属...

2019-11-15 16:23:29 1775

原创 Android 弹窗 DialogFragment

前言一直以来 , 做弹窗功能的时候都是使用的Dialog , 布局复杂的弹窗则使用Activity , 把背景设置成透明, 最近了解到一个DialogFragment , 发现使用起来更加方便, 也是谷歌建议的做法.简介DialogFragment 继承自Fragment , 所以它的用法基本跟Fragment一致 , 也包含了一些生命周期和上下文context 和 监听之类的东西. 而且...

2019-10-30 17:52:44 6072 1

翻译 Android 内存优化——常见内存泄露及优化方案

如果一个无用对象(不需要再使用的对象)仍然被其他对象持有引用,造成该对象无法被系统回收,以致该对象在堆中所占用的内存单元无法被释放而造成内存空间浪费,这中情况就是内存泄露。在 Android 开发中,一些不好的编程习惯会导致我们的开发的 app 存在内存泄露的情况。下面介绍一些在 Android 开发中常见的内存泄露场景及优化方案。单例导致内存泄露单例模式在 Android 开发中会经...

2019-10-22 15:19:40 1411

原创 记一次CSDN的签到抽奖

摘要前一阵子,CSDN上线了签到赢福利,免费抽大奖活动, 可能很多小伙伴都看到了.就是这个东西 , 但我一直没抽过奖, 想起来签到一下而已.正文我上周签到次数好像是3次. 今天想起来这个事 , 就去找了一下抽奖入口.找了半天都没找到 , 联系了一下客服:于是我又进入了签到页面…给大家看一下APP端签到页面的样子:就这么多, 下面没有东西了.只有签到入口, 暂时不知道抽...

2019-10-21 19:31:11 1573 2

原创 flutter 支持64位

最近谷歌商店有了一个新的通知:谷歌应用商店的具体要求为:从2019年8月1日开始,除了一直存在的32位版以外,新应用和应用更新都必须提交64位的版本,不过已经上架的Unity 5.6或更早版本引擎制作的游戏除外,他们可以只提供32位版本直到两年后的2021年8月。而截止发文时间,flutter打包出的apk还不支持64位, 于是记录一下自己的过程.1. 向libs添加32位和64位的flut...

2019-06-28 13:53:32 5407 11

Pepk.jar 签名工具(华为市场或者谷歌市场上架app签名需要)

Pepk.jar 签名工具(华为市场或者谷歌市场上架app签名需要) 华为市场或者谷歌市场上架app签名需要 Android app 签名生成工具 执行完命令,会生成 output.zip , 然后把 output.zip 上传即可

2022-06-28

java_ee_api中英文对照版

java_ee_api中英文对照版 JavaTM Platform Enterprise Edition, v 5.0 API Specifications

2015-09-05

java五子棋小游戏

内含 程序原代码 jar包(可双击直接进入游戏) word功能描述文档

2015-08-29

java课程设计

1、 自定义类说明: (1)类名:MainTest 作用:主类,构建主界面 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JPanel ContentPane; private JButton Insert = new JButton(); private JButton Select = new JButton(); private JButton Update = new JButton(); 内部类:MainTest_actionPerformed,主页面的事件监听。 jenter_ actionPerformed,按钮的事件监听。 主要成员方法: public MainTest() public static void main(String[] args) (2)类名:Insert 作用:实现添加个人信息 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JPanel ContentPane; private JLabel jlab1 = new JLabel(); private JLabel jlab2 = new JLabel(); private JLabel jlab3 = new JLabel(); private JLabel jlab4 = new JLabel(); private JLabel jlab5 = new JLabel(); private JLabel jlab6= new JLabel(); private JLabel jlab7 = new JLabel(); private JLabel jlab8 = new JLabel(); private JTextField jtextfield1 = new JTextField(); private JTextField jtextfield2 = new JTextField(); private JTextField jtextfield3 = new JTextField(); private JTextField jtextfield4 = new JTextField(); private JTextField jtextfield5 = new JTextField(); private JComboBox jcombobox1 = new JComboBox(); private JComboBox jcombobox2 = new JComboBox(); private JTextArea jtextarea = new JTextArea(); private JButton sure = new JButton(); 内部类:sure_actionperformed,按钮的事件监听,实现对数据的插入。 主要成员方法:public Insert(); (3)类名:Update 作用:对个人信息进行修改。 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JPanel ContentPane; private JLabel jlab1 = new JLabel(); private JLabel jlab2 = new JLabel(); private JLabel jlab3 = new JLabel(); private JLabel jlab4 = new JLabel(); private JLabel jlab5 = new JLabel(); private JTextField jtextfield1 = new JTextField(); private JTextField jtextfield2 = new JTextField(); private JTextField jtextfield3 = new JTextField(); private JTextField jtextfield4 = new JTextField(); private JButton sure = new JButton(); private JButton upda = new JButton(); 主要成员方法: public Update() public void actionPerformed(ActionEvent e) (4)类名:Select 作用:查询学生个人信息 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JTextArea taInfo=new JTextArea(); private JPanel panel=new JPanel(); private JTextField jtextfield1=new JTextField(); private JButton jbutton=new JButton("查询"); private JLabel jlabel=new JLabel("学号"); 主要成员方法: public Select() public void actionPerformed(ActionEvent e)

2014-04-02

java学生信息管理系统源代码

java学生信息管理系统源代码&_4

2014-04-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除