Skip to content

Instantly share code, notes, and snippets.

View tomaszpolanski's full-sized avatar
💭
Fluttering

Tomek Polański tomaszpolanski

💭
Fluttering
View GitHub Profile
@tomaszpolanski
tomaszpolanski / sliver_floating_header.dart
Created November 20, 2019 10:21
Sliver that scrolls off like SliverPersistentHeader but takes it size from it's child
import 'dart:math' as math;
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
class SliverFloatingHeader extends SingleChildRenderObjectWidget {
const SliverFloatingHeader({
Key key,
Widget child,
}) : super(key: key, child: child);
@tomaszpolanski
tomaszpolanski / main.dart
Last active November 10, 2019 09:38
main.dart for Flutter Driver example
void main() {
final PublishSubject<Configuration> configStream = PublishSubject();
enableFlutterDriverExtension(
handler: (request) async {
final Configuration config = Configuration.fromJson(json.decode(request));
configStream.add(config);
return null;
},
);
runApp(
@tomaszpolanski
tomaszpolanski / guide.txt
Created April 20, 2019 10:40
Building Flutter for MacOS
- `flutter channel master && flutter doctor`
- `export ENABLE_FLUTTER_DESKTOP=true`
- `git clone git@github.com:google/flutter-desktop-embedding.git`
- Move your project inside the `flutter-desktop-embedding` folder
- Copy the `macos` folder from `flutter-desktop-embedding/example` to your project
- `cd flutter-desktop-embedding/my-project && flutter run -d macos`
@tomaszpolanski
tomaszpolanski / animation_performance.dart
Created March 26, 2019 16:48
Flutter Laggy Animations: How Not To setState
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class AnimationPerformance extends StatefulWidget {
@override
_BadTranslate createState() => _BadTranslate();
}
class _BadTranslate extends State<AnimationPerformance>
with SingleTickerProviderStateMixin {
@tomaszpolanski
tomaszpolanski / performance-test.dart
Created February 9, 2019 09:38
Elements, Keys and Flutter's performance
import 'package:flutter/material.dart';
void main() {
// Displays build timeline
debugProfileBuildsEnabled = true;
runApp(GlobalKeyWidget());
}
class WidgetsWithKeysAreJustUpdated extends StatefulWidget {
@tomaszpolanski
tomaszpolanski / golden_files_test.dart
Last active October 5, 2020 10:13
Golden Files testing in Flutter
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
setUp(() {
// Limits viewport in tests to size of 100, 100 to decrease the size of
// the pngs
WidgetsBinding.instance.renderView.configuration =
TestViewConfiguration(size: const Size(100, 100));
});
@tomaszpolanski
tomaszpolanski / analysis_options.yaml
Last active November 1, 2023 00:04
Strict Flutter lint rules
# Check https://dart-lang.github.io/linter/lints/ for lint rules documentation
# Update from http://dart-lang.github.io/linter/lints/options/options.html
analyzer:
errors:
missing_required_param: error
missing_return: error
todo: ignore
language:
strict-inference: true
@tomaszpolanski
tomaszpolanski / OnErrorResumeNextStreamTransformer2.dart
Created April 25, 2018 08:08
RxDart OnErrorResumeNextStream transformet that passes the error
class OnErrorResumeNextStreamTransformer2<T>
extends StreamTransformerBase<T, T> {
final StreamTransformer<T, T> transformer;
// From the orginal version parameter was changed from `Stream<T> recoveryStream` to `Stream<T> Function (dynamic error) recoveryStream`
OnErrorResumeNextStreamTransformer2(Stream<T> Function (dynamic error) recoveryStream)
: transformer = _buildTransformer(recoveryStream);
@override
Stream<T> bind(Stream<T> stream) => transformer.bind(stream);
@Test fun does_not_show_withing_four_seconds() {
val scheduler = TestScheduler()
TimeScheduler.timeSchedulerHandler = { default, tag ->
if (tag == "click_debounce") scheduler else default
}
rule.launchActivity(null)
Espresso.onView(withId(R.id.fab))
.perform(click())
@Test fun does_not_show_withing_four_seconds() {
val scheduler = TestScheduler()
TimeScheduler.timeSchedulerHandler = { default, tag ->
if (tag == "click_debounce") scheduler else default
}
rule.launchActivity(null)
Espresso.onView(withId(R.id.fab))
.perform(click())