Skip to content

Instantly share code, notes, and snippets.

View tomaszpolanski's full-sized avatar
💭
Fluttering

Tomek Polański tomaszpolanski

💭
Fluttering
View GitHub Profile
abstract class TimeProvider {
Future<void> delayed(Duration duration);
}
class TimeProviderImpl implements TimeProvider {
@override
Future<void> delayed(Duration duration) => Future<void>.delayed(duration);
}
class MockTimeProvider implements TimeProvider {
@tomaszpolanski
tomaszpolanski / time_test.dart
Created April 5, 2021 13:00
Testing time with Widget and Driver tests
testWidgets('time test', (tester) async {
const done = Key('done');
const pending = Key('pending');
await tester.pumpWidget(
FutureBuilder(
future: Future<void>.delayed(const Duration(seconds: 10)),
builder: (context, sn) {
return sn.connectionState == ConnectionState.done
? const SizedBox(key: done)
: const SizedBox(key: pending);
@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 [email protected]: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 September 5, 2024 15: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);