first implementation finished

This commit is contained in:
Fabian Freund
2024-04-22 11:21:01 +02:00
parent 1a13ca0795
commit 0e1972242a
102 changed files with 7192 additions and 55 deletions
@@ -0,0 +1,12 @@
import 'package:flutter/foundation.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
void useListenableCallback(Listenable? listenable, void Function() callback) {
useEffect(
() {
listenable?.addListener(callback);
return () => listenable?.removeListener(callback);
},
[listenable],
);
}
@@ -0,0 +1,11 @@
import 'package:flutter/foundation.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
void useOnDispose(VoidCallback onDispose) {
useEffect(
() {
return onDispose;
},
const [],
);
}
@@ -0,0 +1,13 @@
import 'dart:async';
import 'package:flutter_hooks/flutter_hooks.dart';
void useOnInitialization(FutureOr<void> Function() callback) {
useEffect(
() {
Future.microtask(callback);
return null;
},
[],
);
}
@@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
OverlayPortalController useOverlayPortalController() {
return use(const _OverlayPortalControllerHook());
}
class _OverlayPortalControllerHook extends Hook<OverlayPortalController> {
const _OverlayPortalControllerHook();
@override
HookState<OverlayPortalController, Hook<OverlayPortalController>>
createState() {
return _OverlayPortalControllerHookState();
}
}
class _OverlayPortalControllerHookState
extends HookState<OverlayPortalController, _OverlayPortalControllerHook> {
late final controller = OverlayPortalController();
@override
OverlayPortalController build(BuildContext context) => controller;
@override
String get debugLabel => 'useOverlayPortalController';
}
@@ -0,0 +1,34 @@
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
void useSyncPageWithTab(
TabController tabController,
PageController pageController,
) {
useEffect(
() {
Future<void> syncPage() async {
await pageController.animateToPage(
tabController.index,
curve: Curves.linear,
duration: const Duration(milliseconds: 300),
);
}
void syncTab() {
if (!tabController.indexIsChanging) {
tabController.animateTo(pageController.page!.round());
}
}
tabController.addListener(syncPage);
pageController.addListener(syncTab);
return () {
tabController.removeListener(syncPage);
pageController.removeListener(syncTab);
};
},
[tabController, pageController],
);
}