67 lines
1.9 KiB
Dart
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),
|
|
);
|
|
}
|
|
}
|