git入门

idea能push,所以过了很久才来补档,之前刷了一遍没记笔记,白学

问题

组件不修改

  • 组件外包裹 StatefulBuilder
  • builder参数的值修改为 (context, setState) => Text()
  • 在需要修改的地方调用 setState((){})

傻逼udp组件官网

官网的示例是错的,收信息这样收

1
2
3
4
5
6
7
8
9
10
11
12
static void receive() {
RawDatagramSocket.bind(InternetAddress.anyIPv4, receiverPort)
.then((RawDatagramSocket udpSocket) {
udpSocket.broadcastEnabled = true;
udpSocket.listen((e) {
Datagram? dg = udpSocket.receive();
if (dg != null) {
Log.info("received ${String.fromCharCodes(dg.data)}");
}
});
});
}

go_router传参

其他和vue-router一样,还有个extra

1679231892356

声明函数

1
final void Function(String msg) confirm;

组件布局问题

listview中的gridview

1
2
3
4
5
6
7
8
9
return GridView(
// 禁止滚动
physics: const NeverScrollableScrollPhysics(),
// 自适应
shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 100),
children: children,
);

flutter入门

安装

跟java一样bin仍path里

flutter doctor

flutter doctor --android-licenses

问题

doctor加不上证书

重启电脑

快捷键

  • r 热加载
  • R 热重启
  • p 网格
  • o ios预览
  • q 退出

寄了白寄的一堆类

所以就不寄了

芜湖,直接开摆

Components – Material Design 3

组件库,搞里头,掉就完了他妈的

组件

弹窗

1
2
3
4
5
// 生成一个弹窗
() => showCupertinoDialog(
context: context,
builder: _newShowEditDialog,
)

输入框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Widget _showDialog() {
// 控制
final TextEditingController controller = TextEditingController();

// 错误信息
String? errorText;

// 返回弹窗
return SConfirmDialog(confirm: () {}, children: [
StatefulBuilder(
builder: (builder, setState) => TextField(
controller: controller,
keyboardType: TextInputType.number, // 输入数字
textInputAction: TextInputAction.done, // 键盘回车控制
onChanged: (text) {
setState(() {
// to do something
});
},
decoration: InputDecoration(
hintText: "背景文字",
labelText: "标题",
errorText: errorText,
),
),
),
]);
}

微信小程序入门

吓死你

1
2
3
4
5
6
7
const udp = wx.createUDPSocket()
udp.bind()
udp.send({
address: '192.168.1.116',
port: 8086,
message: 'hello, how are you'
})

dart入门

记个笔记吓吓你

数据类型

和贵族学校一样乱的几个东西,不是数据类型

  • var
  • const
  • final

跟正常沾点边的

  • int
  • double
  • bool
  • List
  • num

String字符串

写法 描述
单引号
双引号
三引号 可以换行

List集合

  • var list = [“123”, “456”];

运算符

符号 功能
~/ 取整
??= 左空赋右值
?? x ?? y 等价于 x ? x : y

对象

  • // 奇怪的构造方法
    Person.setPersonInfo(String username, int age){
        // to do something
    }
    
    1
    2
    3
    4

    - ```dart
    // 奇怪的构造方法 没错他就这么长,像韩国人一样
    Person(this.name, this.age);
  • 调用全局属性需要this.age

  • 设置私有方法需要在变量名前加下划线

  • // 奇怪的写法 这样做就当新变量用了
    get area{
        return this.height * this.width;
    }
    // 同上,当变量赋值就行
    set areaHeight(int height){
        this.height = height;
    }
    
    1
    2
    3
    4
    5
    6

    - ```dart
    // 构造器 实例化之前干的 不止可以写这个
    Rect():height=2,width=10{
    // to do nothing
    }
  • // 链式编程 很乱总之
    person..name='sdadgz'
        ..age=114514
        ..printInfo();
    
    1
    2
    3
    4
    5
    6

    - ```dart
    // 在继承和实现之外多个with
    class C with A, B{
    // to do nothing
    }

异步

1
2
3
4
fun() async{
await fun1();
return 'hello world';
}

第三方依赖

Page 1 | Top packages (pub.dev)

1
2
import '[path]' show [some]; // 局部引入
import '[path]' hide [some]; // 和上面取反

新特性

1
2
3
4
5
6
7
8
9
10
11
12
// 空安全
String? str = "sdadgz"; // 可空
// 断言
str!.length; // 空报错,非空无事
late; // 对象全部变量前,没初始化加上
requered; // 函数变量前,没默认值加上
// 神奇的东西,创建同一个对象
new Object();
const Object();
// 常量构造函数 new可以省略???爷青结
final; // 修饰全局变量
const; // 修饰构造函数 和 替代new

uni-app入门

随便寄点东西吓死你

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
</view>
<view>
<view class="title">目标ip</view>
<input style="background-color: antiquewhite;" v-model="udpHost" />
</view>
<view>
<view class="title">目标端口</view>
<input style="background-color: antiquewhite;" v-model="udpPort"/>
</view>
<view>
<view class="title">发送消息</view>
<input style="background-color: antiquewhite;" v-model="udpMessage"/>
</view>
<button style="margin-top: 50px;" @click="btnStart">
{{buttonLabel}}
</button>
</template>

<script setup>
import {
onMounted,
ref
} from "vue";

// 按钮
const buttonLabel = ref("点我发送消息");
// 标题
const title = "小测试咯";

// udp
const udpHost = ref('255.255.255.255');
const udpPort = ref(60000); // 发送给别人端口
const udpMessage = ref('aa0001b3');
const udpGetPort = 60222; // 接受别人端口
const udpTimeout = 6000;

//udp通讯
function udptest(hexstr) {
var DatagramPacket = plus.android.importClass('java.net.DatagramPacket');
var DatagramSocket = plus.android.importClass('java.net.DatagramSocket');
var InetAddress = plus.android.importClass('java.net.InetAddress');
var NetworkInterface = plus.android.importClass('java.net.NetworkInterface');
var JString = plus.android.importClass('java.lang.String');

var socket;
var address = udpHost.value; //广播地址
var port = Number(udpPort.value); //广播端口
var getPort = udpGetPort; //接收消息端口
var timeout = udpTimeout; //超时时间

try {
if (DatagramSocket == undefined) {
return;
}
// 创建广播地址
var udpip = InetAddress.getByName(address);
// 绑定本机接收UDP反馈消息的端口号
socket = new DatagramSocket(getPort);
// 设置接收超时时长
socket.setSoTimeout(timeout);

/*** 发送广播数据 ***/
let sendData = HexString2Bytes(hexstr); //调用方法对字符串转换为字节数组
let sendPacket = new DatagramPacket(sendData, sendData.length, udpip, port);
socket.send(sendPacket);
console.log('指令发送完成')
} catch (ex) {
console.log('========出错了=======', ex);
} finally {
if (socket != undefined) {
socket.close();
}
}
}

// **重点** 十六进制字符串转换为字节数组
function HexString2Bytes(str) {
var pos = 0;
var len = str.length;
if (len % 2 != 0) {
return null;
}
len /= 2;
var arrBytes = new Array();
for (var i = 0; i < len; i++) {
var s = str.substr(pos, 2);
var v = intToByte(parseInt(s, 16));
arrBytes.push(v);
pos += 2;
}
return arrBytes;
}

function intToByte(i) {
var b = i & 0xFF;
var c = 0;
if (b >= 128) {
c = b % 128;
c = -1 * (128 - c);
} else {
c = b;
}
return c;
}
// **重点**


function btnStart() {
let hexstr = udpMessage.value;
udptest(hexstr);
}
</script>

<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}

.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}

.text-area {
display: flex;
justify-content: center;
}

.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>

注解和反射 入门

反射

名字能看懂的sout试试就知道了

获取

  • 获取构造方法
  • 获取变量
  • 获取方法

构造方法

1
2
constructor.setAccessible(true); // 强制使用private
constructor.newInstance(); // 创建对象

变量

1
2
3
field.setAccessible(true); // 强制使用private
field.set([cat], "[猫]");
field.get([cat]);

方法

1
2
method.setAccessible(true); // 强制使用private
method.invoke([cat], [args]); // 调用方法

注解

1
2
@Target({ElementType.Type})
@Retention(RetentionPolicy.RUNTIME)

存在此注解

1
class.isAnnotationPresent([MyAnnotation.class])

获取此注解

1
class.getDeclaredAnnotation([MyAnnotation.class]);

echarts入门

安装

1
2
npm install echarts
npm install echarts --save

引入依赖

1
import * as echarts from 'echarts';