📜  flutter getx 小吃吧 - Dart (1)

📅  最后修改于: 2023-12-03 15:30:48.369000             🧑  作者: Mango

Flutter GetX - 小吃吧

介绍

小吃吧是一个使用 Flutter GetX 框架开发的点餐系统,功能包括用户登录、浏览菜单、下单、支付等。GetX 是一个轻量级、强大、且易于使用的Flutter框架,帮助开发者在 Flutter 应用程序中快速构建高可用性应用程序。本项目展示了GetX在实际项目中的应用。

特点
  • 代码简单易懂,可以快速上手
  • 状态管理功能强大,支持依赖注入
  • 路由管理更加方便,支持命名路由
  • 内置多种便捷的工具方法,提升开发效率
技术栈

本项目使用的 Flutter 版本是 2.5.3,GetX 版本是 4.1.4,具体使用的技术栈包括:

  • Flutter
  • GetX
  • Dio
  • shared_preferences
功能模块

小吃吧主要包括以下功能模块:

  • 用户注册/登录
  • 菜单查看
  • 加入购物车
  • 下单/支付
  • 历史订单查看
代码片段
添加依赖
dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2
  dio: ^4.0.0
  get: ^4.1.4
  shared_preferences: ^2.0.7
路由管理
GetMaterialApp(
  routes: {
    LoginPage.routeName: (context) => LoginPage(),
    HomePage.routeName: (context) => HomePage(),
    OrderPage.routeName: (context) => OrderPage(),
    HistoryPage.routeName: (context) => HistoryPage(),
  },
);
依赖注入
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialBinding: AuthBinding(),
      // ...
    );
  }
}

class AuthBinding extends Bindings {
  @override
  void dependencies() {
    Get.put(AuthController());
  }
}
状态管理
class AuthController extends GetxController {
  final _isLogin = false.obs;
  bool get isLogin => _isLogin.value;
  set isLogin(bool value) => _isLogin.value = value;

  Future<void> login() async {
    // ...
    isLogin = true;
    // ...
  }
}
网络请求
class MenuController extends GetxController {
  final _menuList = RxList<MenuModel>([]);
  List<MenuModel> get menuList => _menuList.value;

  final _isLoading = true.obs;

  Future<void> fetchMenuList() async {
    try {
      _isLoading.value = true;
      final response = await Dio().get(ApiUrl.menu);
      final data = response.data as List<dynamic>;
      final list = data.map((e) => MenuModel.fromJson(e)).toList();
      _menuList.value = list;
    } catch (e) {
      // ...
    } finally {
      _isLoading.value = false;
    }
  }
}
数据存储
class OrderController extends GetxController {
  final _orderList = RxList<OrderModel>([]);

  Future<void> addOrder(OrderModel order) async {
    final pref = await SharedPreferences.getInstance();
    final jsonString = pref.getString(PrefKey.orderList) ?? '[]';
    final list = orderListFromJson(jsonString);
    list.add(order);
    final newJsonString = orderListToJson(list);
    pref.setString(PrefKey.orderList, newJsonString);
    orderList.refresh();
  }
}

以上是小吃吧项目的一些主要特点和实现方式,通过这个项目,可以更好地理解Flutter GetX的使用和优势。