Skip to content

Instantly share code, notes, and snippets.

import Foundation
func hexCharAsNumber(_ char: String) -> Int64 {
assert(char.count == 1)
let c = Int64((char as NSString).character(at: 0))
if c >= Int(("a" as NSString).character(at: 0)) {
return c - 87
} else {
# 修改应用图标
# 1. 添加依赖
# flutter pub add dev:flutter_launcher_icons
# 2. 运行
# flutter pub run flutter_launcher_icons
flutter_launcher_icons:
android: "launcher_icon"
ios: true
macos:
generate: true
/// 对象状态[T]的历史堆栈,可以推入或者弹出
class HistoryStack<T> {
/// 最大索引的数据,即为最新的状态
final _store = <T>[];
/// 读取内容,用于保存的数据
({
List<T> store,
int step,
@lvsecoto
lvsecoto / AnimatedVisibilityWidget.dart
Created May 29, 2024 02:30
动画显示/隐藏组件
import 'package:flutter/material.dart';
Widget _defaultAnimationWidgetBuilder(
BuildContext context,
Animation<double> animation,
Widget? child,
) {
return SizeTransition(
axis: Axis.horizontal,
sizeFactor: animation,
/// 这里通过mixin给ProviderNotifier添加一些常用操作
// ignore_for_file: invalid_use_of_internal_member
library provider.notiifer;
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:riverpod/riverpod.dart';
@lvsecoto
lvsecoto / AnimatedSizeAndFade.dart
Created May 29, 2024 02:30
组件大小/内容变化动画
import 'package:flutter/material.dart';
class AnimatedSizeAndFade extends StatelessWidget {
/// 每当Child内容发送改变,就会产生动画
///
/// * 大小发送改变,会有边界变换效果
/// * 内容变化,会有淡出淡入效果(和大小变化不一样,内容变化是通过[child]的类型或者key识别)
/// * 可以指定变化时,组件对齐的位置,比如一个上下展开收起效果的组件,那么它的[alignment]应该传[Alignment.topCenter]
const AnimatedSizeAndFade({
super.key,
@lvsecoto
lvsecoto / gist:b14984abcc44d004ba6aa20cb031c2c9
Created March 27, 2026 01:48
电子书《架构整洁之道》中文版,Docker版本
docker run -it --rm -p 5173:5173 node:20-alpine sh -c "
apk add --no-cache git &&
git clone https://github.com/Cactus-proj/Clean-Architecture-zh.git &&
cd Clean-Architecture-zh &&
npm config set registry https://registry.npmmirror.com &&
npm install &&
npx vitepress dev docs --host 0.0.0.0 --base /
"