Figured it out! You need to add:
- Debug signing keys
- Release signing keys
- PlayStore signing keys
export JAVA_HOME='/Applications/Android Studio.app/Contents/jbr/Contents/Home/'
function flutter-watch(){ | |
local PID_FILE="/tmp/tf$$.pid" | |
tmux new-session \;\ | |
send-keys "flutter run --pid-file=$PID_FILE" Enter \;\ | |
split-window -v \;\ | |
send-keys "npx -y nodemon -e dart -x \"cat $PID_FILE | xargs kill -s USR1\"" Enter \;\ | |
resize-pane -y 5 -t 1 \;\ | |
select-pane -t 0 \; | |
rm $PID_FILE; | |
} |
[keys.normal] | |
C-f = [":new", ":insert-output lf-pick", ":theme default", "select_all", "split_selection_on_newline", "goto_file", "goto_last_modified_file", ":buffer-close!", ":theme tokyonight_storm"] |
# launch daily notes with `notes` | |
# launch specific notes with `notes woodworking` | |
# this is a cloud synced file, so it's live on all my devices | |
function notes(){ | |
SUBJECT="${1:=daily}" | |
if [ -z "$SUBJECT" ] | |
then | |
(cd ~/Documents/notes && hx NOTES.md) | |
else | |
(cd ~/Documents/notes && hx "${SUBJECT:u}.md" NOTES.md) |
import 'package:collection/collection.dart'; | |
import 'package:shared_preferences/shared_preferences.dart'; | |
import '/architecture/let.dart'; | |
import '/membership/membership_state.dart'; | |
import '/membership/membership_tasks.dart'; | |
import '/telemetry/analytics.dart'; | |
Future<void> appOpenAction() async { | |
$analytics.vglAppOpenActionRequested(); |
import '/features/architecture/logging.dart'; | |
class CachedQuery<T> { | |
final Duration invalidation; | |
final Future<T> Function(String key) fn; | |
CachedQuery( | |
this.fn, | |
this.invalidation, | |
); |
import 'dart:io'; | |
import 'package:xml/xml.dart'; | |
Future<void> main() async { | |
final str = File('./markers.fcpxmld/Info.fcpxml').readAsStringSync(); | |
final xml = XmlDocument.parse(str); | |
final markers = xml.findAllElements('marker'); | |
for (final x in markers) { |
extension on WidgetTester { | |
Future<void> launchApp() async { | |
await app.main(); | |
await pumpAndSettle(); | |
} | |
Future<void> clearState() async { | |
await SharedPreferences.getInstance().then((it) => it.clear()); | |
} |
import 'package:flutter/material.dart'; | |
class Tappable extends StatefulWidget { | |
const Tappable({ | |
super.key, | |
required this.onPressed, | |
required this.child, | |
}); | |
final VoidCallback? onPressed; |
class MyService { | |
final _log = Logger('MyService'); | |
void init() { | |
try { | |
// operation | |
_log("initialized"); | |
} catch(e, stackTrace){ | |
_log.e("init() error", e, stackTrace); | |
} |