Skip to content

Instantly share code, notes, and snippets.

@zs-dima
zs-dima / form_data.dart
Last active November 2, 2020 19:13
form_data
import 'package:flutter/widgets.dart';
class FormData<FormDataType> {
FormDataType data;
final List<FormEntry> _fields = <FormEntry>[];
FormData({@required this.data});
FormEntry add<FieldType>(
FieldType value, {
@zs-dima
zs-dima / SomeForm.dart
Last active November 2, 2020 07:59
SomeForm
class SomeForm extends FormData<SomeObj> {
FormField<Duration> field1;
FormField<int> field2;
* * *
DocketForm({@required SomeObj obj}) : super(data: obj) {
contact = add(
data.field1,
onSaved: (v) => data.copyWith(field1: v),
validator: (v) => v.isNullOrSpace ? 'Invalid field1 value' : null,
);
@zs-dima
zs-dima / bloc_lifecycle.dart
Last active November 17, 2020 07:53
BlocLifecycle
import 'package:auto_route/auto_route.dart';
import 'package:bloc/bloc.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
extension BlocLifecycleEx on BuildContext {
T bloc<T extends Cubit<Object>>() => BlocLifecycle.of<T>(this);
}
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
Future<void> main() async {
runZonedGuarded(() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://***@***.ingest.sentry.io/***';
Future<void> save<T>(String type, int id, String field, T? value) async {
if (value == null) {
await customStatement(
'DELETE FROM cache'
' WHERE id_type=\'$type\''
' AND id_object=$id'
' AND field=\'$field\'',
);
} else {
String v;
@zs-dima
zs-dima / BlocPager.dart
Last active August 18, 2021 16:35
BlocPager to discuss
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:pager/pager.dart';
typedef BlocPagerCondition<State extends Object> = bool Function(State state);
class BlocPager<State extends Object> extends StatelessWidget {
final IStateObservable<State> bloc;
final PagerWidgetBuilder<State> builder;
final BlocPagerCondition<State>? buildWhen;
@zs-dima
zs-dima / BlocBuilder.dart
Last active August 18, 2021 18:07
BlocBuilder to discuss
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
typedef BlocBuilderCondition<State extends Object> = bool Function(State state);
typedef BlocBuilderConverter<State extends Object, Result extends Object?> = Result Function(State state);
typedef BlocBuilderBuilder<Result extends Object?> = Widget Function(BuildContext context, Result result);
class BlocBuilder<State extends Object, Result extends Object> extends StatelessWidget {
final bool animate;
@zs-dima
zs-dima / IStateObservableEx.dart
Created August 18, 2021 19:27
IStateObservableEx to discuss
import 'package:bloc/bloc.dart';
extension IStateObservableEx<State extends Object?> on IStateObservable<State> {
StateObservable<SubState> whereState<SubState extends State>() => StateObservable<SubState>(
(state is SubState ? state : null) as SubState,
stream.whereState<SubState>(),
);
}
class StateObservable<State extends Object?> {
@zs-dima
zs-dima / StateBuilder.dart
Last active August 19, 2021 09:34
StateBuilder to discuss
typedef StateBuilderCondition<State extends Object> = bool Function(State state);
typedef StateBuilderConverter<State extends Object, Result extends Object?> = Result Function(State state);
typedef StateBuilderBuilder<Result extends Object?> = Widget Function(BuildContext context, Result result);
typedef StateBuilderOnWaiting = Widget Function(BuildContext context);
typedef StateBuilderOnError = Widget Function(BuildContext context, Object? error);
class StateBuilder {
@factory
static _StateBuilder<State> where<State extends Object>({
[
{
"key": "ctrl+shift+l",
"command": "editor.action.transformToLowercase"
},
{
"key": "ctrl+shift+u",
"command": "editor.action.transformToUppercase"
},
{