Skip to content

Instantly share code, notes, and snippets.

View yjbanov's full-sized avatar
💭
Building a Web runtime for Flutter: http://bit.ly/flutter-web

Yegor yjbanov

💭
Building a Web runtime for Flutter: http://bit.ly/flutter-web
View GitHub Profile
@yjbanov
yjbanov / flutter_view_focus.dart
Created December 8, 2023 22:09
A sketch for a FlutterView focus API
abstract interface class FlutterView {
FlutterViewFocusState get focusState;
/// The timing of these events relative to keyboard events
/// is such and such.
FlutterViewFocusStateChanged get onFocusStateChanged;
set onFocusStateChanged(FlutterViewFocusStateChanged callback);
}
typedef FlutterViewFocusStateChanged = Function(
interface class ui.FlutterView
|
base class EngineFlutterView
/ |
/ |
/ |
base class ui.SingletonFlutterWindow final class _EngineFlutterViewImpl
|
final class EngineFlutterWindow
@yjbanov
yjbanov / focusable_platform_view.dart
Last active August 2, 2023 21:23
Demonstrates an issue in semantic node focusability
import 'dart:ui_web' as ui_web;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:web/web.dart' as web;
void main() async {
_registerFactory();
runApp(const MyApp());
@yjbanov
yjbanov / serve_skwasm
Created August 2, 2023 18:12
Serves Flutter Web apps compiled for Skwasm
#!/usr/bin/env python3
from http.server import HTTPServer, SimpleHTTPRequestHandler, test
import sys
import os
class CORSRequestHandler (SimpleHTTPRequestHandler):
def end_headers (self):
self.send_header('Cross-Origin-Opener-Policy', 'same-origin')
self.send_header('Cross-Origin-Embedder-Policy', 'require-corp')
SimpleHTTPRequestHandler.end_headers(self)
@yjbanov
yjbanov / flutter_test_error.txt
Created December 5, 2022 18:31
flutter test --platform=chrome Windows error
[ +11 ms] C:\code\flutter\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev
C:\code\flutter\flutter\bin\cache\dart-sdk\bin\snapshots\frontend_server.dart.snapshot --sdk-root C:\code\flutter\flutter\bin\cache\flutter_web_sdk/
--incremental --target=dartdevc --experimental-emit-debug-metadata -DFLUTTER_WEB_AUTO_DETECT=true --output-dill
C:\Users\FLUTTE~1\AppData\Local\Temp\flutter_tools.57bf1561\flutter_test.7cb2f1fe\out --packages
C:\code\flutter\flutter\packages\flutter\.dart_tool\package_config.json -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts
--track-widget-creation --filesystem-root C:\code\flutter\flutter\packages\flutter\test --filesystem-root
C:\Users\FLUTTE~1\AppData\Local\Temp\flutter_tools.57bf1561\flutter_test.7cb2f1fe\ --filesystem-scheme org-dartlang-app --initialize-from-dill
build\c7922d95bf4a2462b75c84a97c312edb.cache.dill.track.dill --platform C:\code\flutter\flutter\bin\cache\flutter_web_sdk\kernel\ddc_outline.dill
--verbosity=error --no-sound-null-safety
[ +125
class CapturedAccessibilityAnnouncement {
const CapturedAccessibilityAnnouncement(this.message, this.textDirection, {this.assertiveness = Assertiveness.polite});
final String message;
final TextDirection textDirection;
final Assertiveness? assertiveness;
void matches({
Matcher? message,
Matcher? textDirection,
Matcher? assertiveness,
@yjbanov
yjbanov / ck_androd_issue.js
Created August 16, 2022 21:28
Attempts to reproduce CanvasKit issue on Nexus 5X
const transforms = [
[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -0.01, 1],
[1, 0, 0, 0, 0, 0.996917333733128, -0.07845909572784494, -2.353772871835348, 0, 0.07845909572784494, 0.996917333733128, -0.0924799880061613, 0, -0.0007845909572784495, -0.00996917333733128,
1.0009247998800617],
[1, 0, 0, 0, 0, 0.9876883405951378, -0.15643446504023087, -4.693033951206926, 0, 0.15643446504023087, 0.9876883405951378, -0.3693497821458678, 0, -0.0015643446504023087, -0.009876883405951378,
1.0036934978214587],
[1, 0, 0, 0, 0, 0.9723699203976766, -0.2334453638559054, -7.0033609156771615, 0, 0.2334453638559054, 0.9723699203976766, -0.8289023880697037, 0, -0.002334453638559054, -0.009723699203976767,
1.008289023880697],
[1, 0, 0, 0, 0, 0.9510565162951535, -0.3090169943749474, -9.270509831248422, 0, 0.3090169943749474, 0.9510565162951535, -1.4683045111453943, 0, -0.0030901699437494742, -0.009510565162951536,
1.014683045111454],
@yjbanov
yjbanov / raw_dart_ui.dart
Created May 9, 2022 16:28
An example that uses raw dart:ui to fill the screen with green color
import 'dart:ui';
void main() {
var recorder = PictureRecorder();
var canvas = Canvas(recorder, Rect.largest);
canvas.drawColor(const Color(0xFF00FF00), BlendMode.srcOver);
var picture = recorder.endRecording();
var sceneBuilder = SceneBuilder();
sceneBuilder.addPicture(Offset.zero, picture);
var scene = sceneBuilder.build();
@yjbanov
yjbanov / .travis.yml
Created May 26, 2017 04:05
Continuously build Flutter APKs and IPAs using Travis build matrix
matrix:
include:
- os: linux
language: android
licenses:
- 'android-sdk-preview-license-.+'
- 'android-sdk-license-.+'
- 'google-gdk-license-.+'
android:
components:
@yjbanov
yjbanov / image_decoder_stress_test.html
Created January 5, 2022 00:27
ImageDecoder stress test
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ImageDecoder memory usage test</title>
</head>
<body>
<script>