firset commit

This commit is contained in:
GYJ
2024-11-22 16:48:12 +08:00
commit 8d57c7f406
105 changed files with 3615 additions and 0 deletions

193
lib/home/home_view.dart Normal file
View File

@@ -0,0 +1,193 @@
import 'package:cashier_reserve/common/base/provider.dart';
import 'package:cashier_reserve/common/base/ui.dart';
import 'package:cashier_reserve/common/base/ui_model.dart';
import 'package:cashier_reserve/home/home_view_model.dart';
import 'package:cashier_reserve/home/order_view.dart';
import 'package:cashier_reserve/home/order_view_model.dart';
import 'package:cashier_reserve/home/reserve_view.dart';
import 'package:cashier_reserve/home/reserve_view_model.dart';
import 'package:percent_indicator/circular_percent_indicator.dart';
class HomeView extends BaseUI {
@override
Widget buildBody(BuildContext context) {
return Container(
margin: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
child: Row(
children: <Widget>[
_buildLeftBar(context),
_buildRightContainer(context),
],
),
);
}
@override
BaseUIModel getProvider(BuildContext context, {bool listen = true}) {
return MyProvider.of<HomeViewModel>(context, listen: listen);
}
@override
String? getTitleStr(BuildContext context) {
return "";
}
@override
AppBar? getAppBar(BuildContext context) {
return null;
}
Widget _buildLeftBar(BuildContext context) {
HomeViewModel provider =
getProvider(context, listen: false) as HomeViewModel;
const double leftBarWidth = 120;
double itemHeight = (MediaQuery.of(context).size.height -
leftBarWidth -
MediaQuery.of(context).padding.top) /
provider.tabTitles.length;
return Container(
color: const Color(0xff1D2227),
width: leftBarWidth,
child: Column(
children: _buildDestinations(
context,
provider,
leftBarWidth,
itemHeight,
),
),
);
}
Widget _buildRightContainer(BuildContext context) {
HomeViewModel provider =
getProvider(context, listen: false) as HomeViewModel;
return Expanded(
child: Container(
color: Colors.amber,
child: MultiProvider(
providers: [
ChangeNotifierProvider<ReserveViewModel>(
create: (_) => ReserveViewModel(),
),
ChangeNotifierProvider<OrderViewModel>(
create: (_) => OrderViewModel(),
),
],
child: PageView(
controller: provider.pageController,
children: _buildPageViews(context, provider),
),
),
));
}
List<Widget> _buildPageViews(BuildContext context, HomeViewModel provider) {
List<Widget> items = [];
items.add(Center(
child: BaseUIController(stateWidget: ReserveView()),
));
items.add(Center(
child: BaseUIController(stateWidget: OrderView()),
));
items.add(const Center(
child: Text("打印预定"),
));
items.add(const Center(
child: Text("历史订单"),
));
items.add(const Center(
child: Text("来电"),
));
items.add(const Center(
child: Text("客户"),
));
items.add(const Center(
child: Text("消息"),
));
items.add(const Center(
child: Text("更多"),
));
return items;
}
List<Widget> _buildDestinations(BuildContext context, HomeViewModel provider,
double itemWidth, double itemHeight) {
List<Widget> items = List.generate(provider.tabTitles.length, (index) {
return SizedBox(
height: itemHeight,
child: InkWell(
onTap: () {
provider.setIndex(index);
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Image.asset(
provider.currentIndex == index
? "images/tabbar/${provider.tabIcons[index]}_select.png"
: "images/tabbar/${provider.tabIcons[index]}_normal.png",
width: 23,
height: 27,
),
const SizedBox(height: 5),
Text(
provider.tabTitles[index],
style: provider.currentIndex == index
? const TextStyle(color: Colors.white, fontSize: 14)
: const TextStyle(color: Colors.grey, fontSize: 14),
)
],
),
),
);
});
Widget topItem = SizedBox(
width: itemWidth,
height: itemWidth,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
CircularPercentIndicator(
animation: true,
radius: 25.0,
lineWidth: 4.0,
percent: 0.3622,
center: const Text(
"36%",
style: TextStyle(fontSize: 15, color: Colors.white),
),
progressColor: Colors.green,
),
const Text("占15空间27",
style: TextStyle(color: Colors.white, fontSize: 12)),
const Text("共130人",
style: TextStyle(color: Colors.white, fontSize: 12)),
Container(
margin: const EdgeInsets.only(top: 5),
width: 80,
height: 2,
color: Colors.grey,
)
],
),
);
// 将顶部的item放到最前面
items.insert(0, topItem);
return items;
}
}

View File

@@ -0,0 +1,57 @@
import 'package:cashier_reserve/common/base/ui.dart';
import 'package:cashier_reserve/common/base/ui_model.dart';
class HomeViewModel extends BaseUIModel {
int _currentIndex = 0;
int get currentIndex => _currentIndex;
final List<String> _tabTitles = [
"预定",
"订单",
"打印预定",
"历史订单",
"来电",
"客户",
"消息",
"更多"
];
final List<String> _tabIcons = [
"reserve",
"order",
"print",
"history",
"tel",
"customer",
"message",
"more"
];
List<String> get tabTitles => _tabTitles;
List<String> get tabIcons => _tabIcons;
PageController? _pageController;
PageController? get pageController => _pageController;
HomeViewModel() {
_pageController = PageController(initialPage: 0);
}
@override
void dispose() {
_pageController?.dispose();
super.dispose();
}
void setIndex(int index) {
if (_currentIndex == index) {
return;
}
_currentIndex = index;
notifyListeners();
_pageController?.jumpToPage(index);
}
}

31
lib/home/order_view.dart Normal file
View File

@@ -0,0 +1,31 @@
import 'package:cashier_reserve/common/base/ui.dart';
import 'package:cashier_reserve/common/base/ui_model.dart';
import 'package:cashier_reserve/home/order_view_model.dart';
import '../common/base/provider.dart';
class OrderView extends BaseUI {
@override
Widget buildBody(BuildContext context) {
return Container(
child: Center(
child: Text("Order"),
),
);
}
@override
BaseUIModel getProvider(BuildContext context, {bool listen = true}) {
return MyProvider.of<OrderViewModel>(context, listen: listen);
}
@override
String? getTitleStr(BuildContext context) {
return "";
}
@override
AppBar? getAppBar(BuildContext context) {
return null;
}
}

View File

@@ -0,0 +1,3 @@
import 'package:cashier_reserve/common/base/ui_model.dart';
class OrderViewModel extends BaseUIModel {}

View File

@@ -0,0 +1,29 @@
import 'package:cashier_reserve/common/base/ui.dart';
import 'package:cashier_reserve/common/base/ui_model.dart';
import 'package:cashier_reserve/home/reserve_view_model.dart';
import '../common/base/provider.dart';
class ReserveView extends BaseUI {
@override
Widget buildBody(BuildContext context) {
return Center(
child: Text("Reserve"),
);
}
@override
BaseUIModel getProvider(BuildContext context, {bool listen = true}) {
return MyProvider.of<ReserveViewModel>(context, listen: listen);
}
@override
String? getTitleStr(BuildContext context) {
return "";
}
@override
AppBar? getAppBar(BuildContext context) {
return null;
}
}

View File

@@ -0,0 +1,3 @@
import 'package:cashier_reserve/common/base/ui_model.dart';
class ReserveViewModel extends BaseUIModel {}