-
-
Notifications
You must be signed in to change notification settings - Fork 181
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add animationDuration property to useTabController hook #446
base: master
Are you sure you want to change the base?
Conversation
WalkthroughThe changes modify the Changes
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (2)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (2)
packages/flutter_hooks/lib/src/tab_controller.dart (2)
9-9
: LGTM! Consider adding documentation for the new parameter.The addition of the
animationDuration
parameter is a good improvement, allowing for customization of the tab animation duration. The default value and nullable type are appropriate.Consider adding a brief documentation comment for the
animationDuration
parameter to explain its purpose and default behavior. For example:/// The duration of the tab switching animation. Defaults to [kTabScrollDuration]. Duration? animationDuration = kTabScrollDuration,
32-34
: LGTM! Consider makinganimationDuration
nullable in the constructor.The changes to the
_TabControllerHook
class are consistent with the previous modifications. TheanimationDuration
field is correctly added, and the constructor is updated appropriately.For consistency with the
useTabController
function, consider making theanimationDuration
parameter nullable in the constructor:const _TabControllerHook({ required this.length, required this.vsync, required this.initialIndex, required this.animationDuration, super.keys, }); final Duration? animationDuration;This change would maintain consistency with the nullable type used in the
useTabController
function.Also applies to: 39-39
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (1)
- packages/flutter_hooks/lib/src/tab_controller.dart (3 hunks)
🔇 Additional comments (2)
packages/flutter_hooks/lib/src/tab_controller.dart (2)
21-21
: LGTM! Consistent implementation of the new parameter.The
animationDuration
parameter is correctly passed to the_TabControllerHook
constructor, ensuring that the custom animation duration is properly propagated to the internal implementation.
49-49
: LGTM! Proper implementation of the custom animation duration.The
animationDuration
parameter is correctly passed to theTabController
constructor, ensuring that the custom animation duration is applied to the created controller.
Hello! |
Hello! I may add test but what for? TabController({ int initialIndex = 0, Duration? animationDuration, required this.length, required TickerProvider vsync, }) : assert(length >= 0), assert(initialIndex >= 0 && (length == 0 || initialIndex < length)), _index = initialIndex, _previousIndex = initialIndex, _animationDuration = animationDuration ?? kTabScrollDuration, _animationController = AnimationController.unbounded( value: initialIndex.toDouble(), vsync: vsync, ) { if (kFlutterMemoryAllocationsEnabled) { ChangeNotifier.maybeDispatchObjectCreation(this); } } |
Yes but we need a test for that. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (1)
- packages/flutter_hooks/test/use_tab_controller_test.dart (1 hunks)
🔇 Additional comments (1)
packages/flutter_hooks/test/use_tab_controller_test.dart (1)
142-161
: LGTM with suggested improvementsThe addition of this test case is valuable, as it verifies that the
animationDuration
property of theTabController
created byuseTabController
matches that of a directly constructedTabController
. This ensures consistency in behavior between the hook and the standard constructor.With the suggested improvements implemented, this test will be more aligned with the existing codebase and provide clear, effective coverage for the new feature.
testWidgets('initial animationDuration matches with real constructor', (tester) async { | ||
late TabController controller; | ||
late TabController controller2; | ||
|
||
final vsync = TickerProviderMock(); | ||
final ticker = Ticker((_) {}); | ||
when(vsync.createTicker((_) {})).thenReturn(ticker); | ||
|
||
await tester.pumpWidget( | ||
HookBuilder( | ||
builder: (context) { | ||
controller = useTabController(initialLength: 4); | ||
controller2 = TabController(length: 4, vsync: vsync); | ||
return Container(); | ||
}, | ||
), | ||
); | ||
|
||
expect(controller.animationDuration, controller2.animationDuration); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Improve test implementation and description
The test case correctly verifies that the animationDuration
matches between controllers created with useTabController
and the TabController
constructor. However, there are a few improvements we can make:
- Use
useSingleTickerProvider()
instead ofTickerProviderMock
as suggested in the past review comments. - Make the test description more specific about what it's testing.
Here's a suggested implementation:
testWidgets('useTabController creates TabController with matching animationDuration', (tester) async {
late TabController hookController;
late TabController constructorController;
await tester.pumpWidget(
HookBuilder(
builder: (context) {
final vsync = useSingleTickerProvider();
hookController = useTabController(initialLength: 4);
constructorController = TabController(length: 4, vsync: vsync);
return Container();
},
),
);
expect(hookController.animationDuration, constructorController.animationDuration);
});
This implementation addresses the previous comments and improves the test's clarity and consistency with the rest of the test suite.
Do you mind formatting the files? |
Summary by CodeRabbit
New Features
animationDuration
parameter for theuseTabController
function, allowing for customizable tab transition animations.kTabScrollDuration
export from the Flutter material library for enhanced functionality.Improvements
TabController
to accept the newanimationDuration
parameter for improved user experience during tab transitions.Tests
animationDuration
property of theTabController
matches when created using theuseTabController
hook and directly via constructor.