Skip to content

Commit

Permalink
Remove shrinkwrap from tree view
Browse files Browse the repository at this point in the history
  • Loading branch information
kenzieschmoll committed Jul 14, 2023
1 parent 56d3995 commit 0527c4e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,13 @@ import '../../shared/primitives/auto_dispose.dart';
import '../../shared/primitives/utils.dart';
import '../../shared/theme.dart';
import '../../shared/tree.dart';
import '../../shared/utils.dart';
import 'program_explorer_controller.dart';
import 'program_explorer_model.dart';

const containerIcon = Icons.folder;
const libraryIcon = Icons.insert_drive_file;

double get _programExplorerRowHeight => scaleByFontFactor(22.0);
double get _selectedNodeTopSpacing => _programExplorerRowHeight * 3;
double get _selectedNodeTopSpacing => defaultTreeViewRowHeight * 3;

class _ProgramExplorerRow extends StatelessWidget {
const _ProgramExplorerRow({
Expand Down Expand Up @@ -313,7 +311,7 @@ class _FileExplorerState extends State<_FileExplorer> with AutoDisposeMixin {
double get selectedNodeOffset => widget.controller.selectedNodeIndex.value ==
-1
? -1
: widget.controller.selectedNodeIndex.value * _programExplorerRowHeight;
: widget.controller.selectedNodeIndex.value * defaultTreeViewRowHeight;

@override
void initState() {
Expand All @@ -334,7 +332,6 @@ class _FileExplorerState extends State<_FileExplorer> with AutoDisposeMixin {
@override
Widget build(BuildContext context) {
return TreeView<VMServiceObjectNode>(
itemExtent: _programExplorerRowHeight,
dataRootsListenable: widget.controller.rootObjectNodes,
onItemSelected: widget.onItemSelected,
onItemExpanded: widget.onItemExpanded,
Expand Down Expand Up @@ -392,7 +389,6 @@ class _ProgramOutlineView extends StatelessWidget {
return const CenteredCircularProgressIndicator();
}
return TreeView<VMServiceObjectNode>(
itemExtent: _programExplorerRowHeight,
dataRootsListenable: controller.outlineNodes,
onItemSelected: onItemSelected,
onItemExpanded: onItemExpanded,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class ExpandableVariable extends StatelessWidget {
return TreeView<DartObjectNode>(
dataRootsListenable:
FixedValueListenable<List<DartObjectNode>>([variable]),
shrinkWrap: true,
dataDisplayProvider: dataDisplayProvider ??
(variable, onPressed) => DisplayProvider(
variable: variable,
Expand Down
51 changes: 22 additions & 29 deletions packages/devtools_app/lib/src/shared/tree.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import 'collapsible_mixin.dart';
import 'primitives/auto_dispose.dart';
import 'primitives/trees.dart';
import 'theme.dart';
import 'utils.dart';

double get defaultTreeViewRowHeight => scaleByFontFactor(20.0);

class TreeView<T extends TreeNode<T>> extends StatefulWidget {
const TreeView({
Expand All @@ -19,8 +22,6 @@ class TreeView<T extends TreeNode<T>> extends StatefulWidget {
required this.dataDisplayProvider,
required this.onItemSelected,
this.onItemExpanded,
this.shrinkWrap = false,
this.itemExtent,
this.onTraverse,
this.emptyTreeViewBuilder,
this.scrollController,
Expand All @@ -29,14 +30,6 @@ class TreeView<T extends TreeNode<T>> extends StatefulWidget {

final ValueListenable<List<T>> dataRootsListenable;

/// Use [shrinkWrap] iff you need to place a TreeView inside a ListView or
/// other container with unconstrained height.
///
/// Enabling shrinkWrap impacts performance.
///
/// Defaults to false.
final bool shrinkWrap;

final Widget Function(T, VoidCallback) dataDisplayProvider;

/// Invoked when a tree node is selected. If [onItemExpanded] is not
Expand All @@ -48,8 +41,6 @@ class TreeView<T extends TreeNode<T>> extends StatefulWidget {
/// Otherwise, [onItemSelected] will be invoked, if provided.
final FutureOr<void> Function(T)? onItemExpanded;

final double? itemExtent;

/// Called on traversal of child node during [buildFlatList].
final void Function(T)? onTraverse;

Expand Down Expand Up @@ -82,23 +73,25 @@ class _TreeViewState<T extends TreeNode<T>> extends State<TreeView<T>>
@override
Widget build(BuildContext context) {
if (dataFlatList.isEmpty) return _emptyTreeViewBuilder();
final content = SelectionArea(
child: ListView.builder(
itemCount: dataFlatList.length,
itemExtent: widget.itemExtent,
shrinkWrap: widget.shrinkWrap,
physics: widget.shrinkWrap ? const ClampingScrollPhysics() : null,
controller: widget.scrollController,
itemBuilder: (context, index) {
final T item = dataFlatList[index];
return _TreeViewItem<T>(
item,
buildDisplay: (onPressed) =>
widget.dataDisplayProvider(item, onPressed),
onItemSelected: _onItemSelected,
onItemExpanded: _onItemExpanded,
);
},
final content = SizedBox(
height: dataFlatList.length * defaultTreeViewRowHeight,
child: SelectionArea(
child: ListView.builder(
itemCount: dataFlatList.length,
itemExtent: defaultTreeViewRowHeight,
physics: const ClampingScrollPhysics(),
controller: widget.scrollController,
itemBuilder: (context, index) {
final T item = dataFlatList[index];
return _TreeViewItem<T>(
item,
buildDisplay: (onPressed) =>
widget.dataDisplayProvider(item, onPressed),
onItemSelected: _onItemSelected,
onItemExpanded: _onItemExpanded,
);
},
),
),
);
if (widget.includeScrollbar) {
Expand Down

0 comments on commit 0527c4e

Please sign in to comment.