📅  最后修改于: 2023-12-03 15:30:48.369000             🧑  作者: Mango
小吃吧是一个使用 Flutter GetX 框架开发的点餐系统,功能包括用户登录、浏览菜单、下单、支付等。GetX 是一个轻量级、强大、且易于使用的Flutter框架,帮助开发者在 Flutter 应用程序中快速构建高可用性应用程序。本项目展示了GetX在实际项目中的应用。
本项目使用的 Flutter 版本是 2.5.3,GetX 版本是 4.1.4,具体使用的技术栈包括:
小吃吧主要包括以下功能模块:
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的使用和优势。