aslan-flutter/lib/chatvibe_features/home/game/index_game_item_page.dart
2026-07-01 18:25:58 +08:00

67 lines
1.9 KiB
Dart

import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';
import 'package:aslan/chatvibe_data/sources/repositories/config_repository_imp.dart';
import 'package:aslan/app_localizations.dart';
import 'package:aslan/chatvibe_ui/components/at_compontent.dart';
import 'package:aslan/chatvibe_domain/models/res/at_get_list_game_config_res.dart';
class IndexGameItemPage extends StatefulWidget {
String? category;
IndexGameItemPage({this.category});
@override
_IndexGameItemPageState createState() => _IndexGameItemPageState();
}
class _IndexGameItemPageState extends State<IndexGameItemPage> {
List<ATGetListGameConfigRes> games = [];
@override
void initState() {
super.initState();
ConfigRepositoryImp()
.getListGameConfig(
category: widget.category,
countryCode: ui.window.locale.countryCode,
)
.then((result) {
games = result;
setState(() {});
})
.catchError((e) {});
}
@override
Widget build(BuildContext context) {
return games.isEmpty
? mainEmpty(msg: ATAppLocalizations.of(context)!.noData)
: SingleChildScrollView(
child: GridView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, // 每行2个
childAspectRatio: 1, // 宽高比
mainAxisSpacing: 10,
crossAxisSpacing: 10,
),
padding: EdgeInsets.all(10),
itemCount: games.length,
itemBuilder: (context, index) {
return _buildItem(games[index]);
},
),
);
}
_buildItem(ATGetListGameConfigRes game) {
return netImage(
url: game.cover ?? "",
fit: BoxFit.fill,
borderRadius: BorderRadius.circular(12),
);
}
}