您可以通过使用listView.builder与堆栈结合使用堆叠瓷砖在底部的情况下实现此功能。以下是:
import 'package:flutter/material.dart';
import 'package:visibility_detector/visibility_detector.dart';
class LeaderboardScreen extends StatefulWidget {
@override
_LeaderboardScreenState createState() => _LeaderboardScreenState();
}
class _LeaderboardScreenState extends State<LeaderboardScreen> {
final List<String> users = List.generate(50, (index) => 'User ${index + 1}');
final String myUser = 'User 25'; // Example: Your position in the leaderboard
bool isMyTileVisible = false;
@override
Widget build(BuildContext context) {
return Stack(
children: [
ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
final user = users[index];
if (user == myUser) {
return VisibilityDetector(
key: Key(myUser),
onVisibilityChanged: (visibilityInfo) {
setState(() {
isMyTileVisible = visibilityInfo.visibleFraction > 0;
});
},
child: _buildTile(user, isHighlighted: true),
);
}
return _buildTile(user);
},
),
// Floating tile at the bottom when not visible
if (!isMyTileVisible)
Positioned(
bottom: 10,
left: 10,
right: 10,
child: _buildTile(myUser, isHighlighted: true),
),
],
);
}
Widget _buildTile(String user, {bool isHighlighted = false}) {
return Card(
color: isHighlighted ? Colors.blueAccent : Colors.white,
child: ListTile(
title: Text(
user,
style: TextStyle(color: isHighlighted ? Colors.white : Colors.black),
),
),
);
}
}