Skip to content

Instantly share code, notes, and snippets.

Avatar
🐶
( ´・‿・`)

Masayuki Ono (mono) mono0926

🐶
( ´・‿・`)
View GitHub Profile
View main.dart
import 'dart:async';
import 'package:flutter_test/flutter_test.dart';
import 'package:rxdart/rxdart.dart';
void main() {
test('', () async {
// broadcast取ると、expectはtrueになる
// BehaviorSubjectでも、expectはtrueになる
final controller = StreamController<bool>.broadcast();
View state_notifier.dart
class PackageMetrics extends StateNotifier<AsyncValue<PackageMetricsScore>> {
PackageMetrics(this._ref, {required this.packageName})
: super(const AsyncLoading()) {
_ref
.watch(pubRepositoryProvider)
.getPackageMetrics(packageName: packageName)
.then((value) => state = AsyncData(value));
}
final AutoDisposeRef _ref;
View async_notifier.dart
class PackageMetrics
// AutoDispose/Family版のAsyncNotifier
extends AutoDisposeFamilyAsyncNotifier<PackageMetricsScore, String> {
late String _packageName;
@override
Future<PackageMetricsScore> build(String arg) {
_packageName = arg;
return ref
.watch(pubRepositoryProvider)
.getPackageMetrics(packageName: _packageName);
@mono0926
mono0926 / main.dart
Last active Dec 11, 2022
Responsive Navigation
View main.dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
void main() {
runApp(
const ProviderScope(
child: App(),
),
);
View main.dart
import 'package:quiver/collection.dart';
void main() {
// maximumSizeのデフォルトは100
final cache = LruMap<String, int>(maximumSize: 3);
cache['a'] = 1;
print(cache['a']); // 1
cache['b'] = 2;
print(cache['a']); // 1
View any_map.diff
- json['foo'] as Map<String, dynamic>),
+ Map<String, dynamic>.from(json['foo'] as Map)),
View main.dart
// ignore_for_file: omit_local_variable_types, prefer_final_locals, equal_elements_in_set
import 'dart:collection';
void main() {
// Setのデフォルト実装は、順番が保たれる LinkedHashSet
Set<String> animals = {'dog', 'dog', 'cat'};
// 常に[dog, cat]
print(animals.toList());
Set<String> animals2 = HashSet.of(['dog', 'dog', 'cat']);
View main.dart
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
void main() {
final crashlytics = FirebaseCrashlytics.instance;
// いずれも未キャッチ例外なので `fatal: true`(ネイティブのクラッシュと同等の扱い)が適切
// (例外処理であまり想定してないException受け取った時などは `fatal: false` でも良い感)
// オリジナルの`FlutterError.presentError`は呼ばずともログは充分そう
FlutterError.onError = crashlytics.recordFlutterFatalError;
View user.dart
@freezed
class User with _$User {
@JsonSerializable()
const factory User(
@JsonKey() String? displayName,
) = _User;
const User._();
factory User.fromJson(JsonMap json) => _$UserFromJson(json);
}
View build.yaml
targets:
$default:
builders:
source_gen|combining_builder:
options:
ignore_for_file:
- type=lint
- implicit_dynamic_parameter
- implicit_dynamic_type
- implicit_dynamic_method