mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

The documentation for using `findChildIndexCallback` recommends using `indexOf`, but that causes [this line](05259ca938/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart (L259)
) to throw in debug mode, and when using `SliverList`, it breaks the render.
This PR changes the usage to check if the index is not negative before using it, and changes to return `null` instead if the child wasn't able to be found.
There's the related issue #107123, but this doesn't actually fix it.
-----
This PR has been updated to add the snippets that were used in the `findChildIndexCallback` comment as examples with proper tests, as well as updating the comment to reference the new examples.
30 lines
1.1 KiB
Dart
30 lines
1.1 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_api_samples/widgets/page_view/page_view.1.dart'
|
|
as example;
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
testWidgets(
|
|
'tapping Reverse button should reverse PageView',
|
|
(WidgetTester tester) async {
|
|
await tester.pumpWidget(const example.PageViewExampleApp());
|
|
final Finder pageView = find.byType(PageView);
|
|
final Finder reverseFinder = find.text('Reverse items');
|
|
final Finder firstItemFinder = find.byKey(const ValueKey<String>('1'));
|
|
final Finder lastItemFinder = find.byKey(const ValueKey<String>('5'));
|
|
expect(pageView, findsOneWidget);
|
|
expect(reverseFinder, findsOneWidget);
|
|
expect(firstItemFinder, findsOneWidget);
|
|
expect(lastItemFinder, findsNothing);
|
|
await tester.tap(reverseFinder);
|
|
await tester.pump();
|
|
expect(firstItemFinder, findsNothing);
|
|
expect(lastItemFinder, findsOneWidget);
|
|
},
|
|
);
|
|
}
|