Skip to content

Instantly share code, notes, and snippets.

View CaiJingLong's full-sized avatar
💭
I may be slow to respond.

Caijinglong CaiJingLong

💭
I may be slow to respond.
View GitHub Profile
@CaiJingLong
CaiJingLong / main.dart
Last active March 24, 2020 09:10
Flutter ListWheelView example
import 'package:flutter/material.dart';
import 'dart:collection';
import 'dart:math';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
@CaiJingLong
CaiJingLong / main.dart
Created March 24, 2020 06:32
extension method in dart
typedef void ForEachHandle<T>(int index, T item);
extension _A<T> on List<T> {
void forEachIndexed(void func(int index, T item)) {
for (var i = 0; i < this.length; i++) {
func(i, this[i]);
}
}
void forEachIndexed2(void Function(int index, T item) func) {
@CaiJingLong
CaiJingLong / ResultHandler.kt
Last active August 22, 2020 15:02
ResultHandler in kotlin
package top.kikt.imagescanner.util
import android.os.Handler
import android.os.Looper
import io.flutter.plugin.common.MethodChannel
class ResultHandler(var result: MethodChannel.Result?) {
companion object {
@CaiJingLong
CaiJingLong / main.dart
Last active March 10, 2020 03:02
range like python for dart
void main() {
print(range(100, start: 1, step: 7));
}
Iterable<int> range(int end, {int start = 0, int step = 1}) sync* {
assert(step >= 1);
int r = start;
while (r < end) {
yield r;
@CaiJingLong
CaiJingLong / main.dart
Created February 26, 2020 09:59
pop to root
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
@CaiJingLong
CaiJingLong / main.dart
Last active February 7, 2020 06:51
regex match @words
main(List<String> arguments) {
final r = RegExp(r'\s(@(\S+))');
final str = '@abc adkj sfksjdlfj@@@fjdlksjf @abc@aa df @@@ccc @dfj @你好';
final matches = r.allMatches(" " + str);
for (final match in matches) {
// print(match.group(1)); // 带@符号的
print(match.group(2)); // 不带@符号的
}
}
@CaiJingLong
CaiJingLong / dartpad-share.js
Last active March 10, 2020 03:19
add share button for dartpad, for UserScript/ tampermonkey, you just add token for input
// ==UserScript==
// @name Shard in dartpad
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Caijinglong
// @match https://dartpad.cn/*
// @match https://dartpad.dev/*
// @grant none
// @require https://code.jquery.com/jquery-3.4.1.min.js
@CaiJingLong
CaiJingLong / build_android.sh
Last active August 12, 2022 10:15
在mac上 使用ndk r21b 编译 ffmpeg 4.3.1 的so
#!/bin/bash
NDK=/Volumes/Samsung-T5/sdk/android-ndk-r21b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
API=21
function build_android() {
cd ffmpeg-4.3.1
echo "Compiling FFmpeg for $CPU"
./configure \
@CaiJingLong
CaiJingLong / build.gradle
Created December 21, 2019 13:50
阿里云 gradle maven仓库配置
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
maven{
url 'https://maven.aliyun.com/repository/google'
}
maven{
url 'https://maven.aliyun.com/repository/jcenter'
}
}
@CaiJingLong
CaiJingLong / ReplyHandler.kt
Last active December 4, 2020 03:37
Flutter 调用以及返回的封装, 防止重复返回, 有锁版, 防止多线程重复返回的可能
import android.os.Handler
import android.os.Looper
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
/// create 2019-11-27 by cai
class ReplyHandler(val call: MethodCall, private val result: MethodChannel.Result?) {