liuyuqi-dellpc 1 year ago
parent
commit
f7dfe57798

+ 10 - 0
lib/modules/home/bindings/home_binding.dart

@@ -0,0 +1,10 @@
+import 'package:get/get.dart';
+import '../controllers/home_controller.dart';
+class HomeBinding extends Bindings {
+  @override
+  void dependencies() {
+    Get.lazyPut<HomeController>(
+      () => HomeController(),
+    );
+  }
+}

+ 29 - 0
lib/modules/home/controllers/home_controller.dart

@@ -0,0 +1,29 @@
+import 'package:get/get.dart';
+import 'package:get_demo/models/good_model.dart';
+import 'package:get_demo/modules/home/states/home_state.dart';
+import 'package:dio/dio.dart';
+import 'package:get_demo/routes.dart';
+
+class HomeController extends GetxController {
+  HomeState state = HomeState();
+
+  getData() async {
+    final response = await Dio().get('https://jdmall.itying.com/api/pcate');
+    final goodsList = GoodsModel.fromJson(response.data);
+    state.goodsData.value = goodsList.result!;
+  }
+
+  toDetail(int index) {
+    Get.toNamed(Routes.second, arguments: state.goodsData[index]);
+  }
+
+  @override
+  void onInit() {
+    super.onInit();
+    getData();
+  }
+
+
+  @override
+  void onClose() {}
+}

+ 7 - 0
lib/modules/home/states/home_state.dart

@@ -0,0 +1,7 @@
+import 'package:get/get.dart';
+import 'package:get_demo/models/good_model.dart';
+
+class HomeState {
+  RxList<Result> goodsData = <Result>[].obs;
+  RxList<Result> likeList = <Result>[].obs;
+}

+ 37 - 0
lib/modules/home/views/home_view.dart

@@ -0,0 +1,37 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import '../controllers/home_controller.dart';
+
+class HomeView extends GetView<HomeController> {
+  const HomeView({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: const Text('状态管理'),
+        centerTitle: true,
+      ),
+      body: Obx(() {
+        return ListView.builder(
+            itemCount: controller.state.goodsData.length,
+            itemBuilder: (context, index) {
+              return ListTile(
+                title: Text(controller.state.goodsData[index].title ??
+                    ''),
+                trailing: InkWell(
+                    onTap: () {
+                      controller.toDetail(index);
+                    },
+                    child: Obx(() {
+                      return Text(controller.state.likeList.contains(
+                          controller.state.goodsData[index]) ? '已收藏' : '收藏商品');
+                    })
+                ),
+              );
+            });
+      }),
+
+    );
+  }
+}

+ 12 - 0
lib/modules/second/bindings/second_binding.dart

@@ -0,0 +1,12 @@
+import 'package:get/get.dart';
+
+import '../controllers/second_controller.dart';
+
+class SecondBinding extends Bindings {
+  @override
+  void dependencies() {
+    Get.lazyPut<SecondController>(
+      () => SecondController(),
+    );
+  }
+}

+ 39 - 0
lib/modules/second/controllers/second_controller.dart

@@ -0,0 +1,39 @@
+import 'package:get/get.dart';
+import 'package:get_demo/models/good_model.dart';
+import 'package:get_demo/modules/home/controllers/home_controller.dart';
+import 'package:get_demo/modules/second/states/second_state.dart';
+
+class SecondController extends GetxController {
+  SecondState state = SecondState();
+
+  ///获取home页面的controller
+  final controllerP = Get.find<HomeController>();
+
+  ///如果home的存储收藏的likeList里的实例的sId包含了当前实例的sId,返回true
+  bool isLike(Result result) {
+    return controllerP.state.likeList
+        .any((element) => element.sId == result.sId);
+  }
+
+  ///把当前实例存储到likeList里
+  addLike(Result result) {
+    controllerP.state.likeList.add(result);
+  }
+
+  ///从likeList移除当前实例
+  removeLike(Result result) {
+    controllerP.state.likeList.remove(result);
+  }
+
+  @override
+  void onInit() {
+    super.onInit();
+
+    ///接收第一页传过来的实例,赋值给Detail
+    state.Detail = Get.arguments;
+  }
+
+
+  @override
+  void onClose() {}
+}

+ 4 - 0
lib/modules/second/states/second_state.dart

@@ -0,0 +1,4 @@
+import 'package:get_demo/models/good_model.dart';
+class SecondState{
+  Result Detail=Result();
+}

+ 34 - 0
lib/modules/second/views/second_view.dart

@@ -0,0 +1,34 @@
+import 'package:flutter/material.dart';
+
+import 'package:get/get.dart';
+
+import '../controllers/second_controller.dart';
+
+class SecondView extends GetView<SecondController> {
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+        appBar: AppBar(
+          title: const Text('SecondView'),
+          centerTitle: true,
+          // leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: () {
+          //   controller.getBack();
+          // },),
+        ),
+        body: Obx(() {
+          return Row(
+            children: [
+              Text(controller.state.Detail.title ?? ''),
+              IconButton(onPressed: () {
+                controller.isLike(controller.state.Detail)?controller.removeLike(controller.state.Detail):controller.addLike(controller.state.Detail);
+              },
+                  icon: Icon(Icons.favorite,
+                      color: controller.isLike(controller.state.Detail)
+                          ? Colors.red
+                          : Colors.grey))
+            ],
+          );
+        })
+    );
+  }
+}

+ 8 - 9
lib/routes.dart

@@ -1,19 +1,18 @@
-
 import 'package:get/get.dart';
-import 'package:get_demo/pages/home_page.dart';
-import 'package:get_demo/pages/second_page.dart';
+import 'package:get_demo/modules/home/bindings/home_binding.dart';
+import 'package:get_demo/modules/home/views/home_view.dart';
+import 'package:get_demo/modules/second/bindings/second_binding.dart';
+import 'package:get_demo/modules/second/views/second_view.dart';
 
 /// Description: routes
 /// Time       : 05/06/2023 Saturday
 /// Author     : liuyuqi.gov@msn.cn
 class Routes {
-
   static const String home = "/home";
   static const second = "/second";
 
-  static final routes=[
-    GetPage(name: home, page: ()=>const HomePage(), binding: HomeBinding()),
-    GetPage(name: second, page: ()=>const SecondPage(), binding: SecondBinding())
-
-  ]
+  static final routes = [
+    GetPage(name: home, page: () => HomeView(), binding: HomeBinding()),
+    GetPage(name: second, page: () => SecondView(), binding: SecondBinding())
+  ];
 }