ShopPage.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_habit/common/I18N.dart';
  3. import 'package:flutter_habit/provider/UserProvider.dart';
  4. import 'package:flutter_habit/network/Repository.dart';
  5. import 'package:flutter_habit/view/drawer/shop/GoodsPage.dart';
  6. import 'package:provider/provider.dart';
  7. class ShopPage extends StatefulWidget {
  8. @override
  9. _ShopPageState createState() => _ShopPageState();
  10. }
  11. class _ShopPageState extends State<ShopPage> {
  12. late bool isRequesting;
  13. List? data;
  14. @override
  15. void initState() {
  16. super.initState();
  17. isRequesting = true;
  18. data = [];
  19. loadData();
  20. }
  21. Future<void> loadData() async {
  22. data = await Repository.getInstance()!.getGoodsList(context);
  23. isRequesting = false;
  24. setState(() {});
  25. }
  26. @override
  27. Widget build(BuildContext context) {
  28. UserProvider userProvider =
  29. Provider.of<UserProvider>(context);
  30. return Scaffold(
  31. appBar: AppBar(
  32. title: Text(I18N.of("商城")),
  33. actions: userProvider.token == null
  34. ? []
  35. : <Widget>[
  36. Row(
  37. children: <Widget>[
  38. Text(
  39. "${userProvider.coins} x ",
  40. style: TextStyle(fontSize: 16),
  41. ),
  42. Icon(Icons.monetization_on),
  43. Text(" "),
  44. ],
  45. ),
  46. ],
  47. ),
  48. body: Padding(
  49. padding: EdgeInsets.all(16),
  50. child: ListView(
  51. children: <Widget>[
  52. isRequesting ? LinearProgressIndicator() : Container(),
  53. Column(
  54. children: data!.map((i) {
  55. return ListTile(
  56. leading: Icon(Icons.shopping_basket),
  57. title: Text(
  58. i["name"].toString(),
  59. maxLines: 1,
  60. ),
  61. subtitle: Text("${I18N.of("金币")} : ${i["price"].toString()}"),
  62. trailing: Icon(Icons.chevron_right),
  63. onTap: () {
  64. Navigator.of(context)
  65. .push(MaterialPageRoute(builder: (_) => GoodsPage(i)));
  66. },
  67. );
  68. }).toList(),
  69. ),
  70. ],
  71. ),
  72. ),
  73. );
  74. }
  75. }