【发布时间】:2026-01-24 08:25:02
【问题描述】:
是的,基本上标题说明了一切。我想看看哪个项目最集中,然后增加它的大小。这是我编写的代码,但它在性能方面存在一些大问题:
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:tastie/models/HomeFeed.dart';
import 'package:tastie/models/Restaurant.dart';
import 'package:visibility_detector/visibility_detector.dart';
import 'restaurant_preview.dart';
class Home extends StatelessWidget {
Home(this.feed);
final HomeFeed feed;
@override
Widget build(BuildContext context) {
double visible = 0;
return ListView(
scrollDirection: Axis.horizontal,
children: [
for (Restaurant resto in feed.recents)
(_restoprev(context, resto, visible)),
],
);
}
Widget _restoprev(BuildContext context, Restaurant resto, double visible) {
GlobalKey _key = GlobalKey();
RestaurantPreview restopreview = RestaurantPreview(context, resto, key: _key);
return Center(
child: Card(
clipBehavior: Clip.antiAlias,
child: VisibilityDetector(
key: Key(resto.id + Random().nextInt(10000).toString()),
onVisibilityChanged: (VisibilityInfo info) {
if (info.visibleFraction > visible) {
final RestaurantPreviewState previewState = _key.currentState;
previewState.update(true);
} else {
final RestaurantPreviewState previewState = _key.currentState;
previewState.update(true);
}
},
child: restopreview,
),
),
);
}
}
但是此代码不起作用,因为它与平滑相反,它落后并且影响了多个小部件。所以我的问题是如何检测哪个视图最受关注以及如何扩展它?还有另一种方法可以改变餐厅的状态,因为我读到 GlobalKey 仅用于调试。也许使用 ObjectKey?
【问题讨论】:
标签: flutter dart flutter-animation flutter-listview