firset commit
This commit is contained in:
193
lib/home/home_view.dart
Normal file
193
lib/home/home_view.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
57
lib/home/home_view_model.dart
Normal file
57
lib/home/home_view_model.dart
Normal 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
31
lib/home/order_view.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
3
lib/home/order_view_model.dart
Normal file
3
lib/home/order_view_model.dart
Normal file
@@ -0,0 +1,3 @@
|
||||
import 'package:cashier_reserve/common/base/ui_model.dart';
|
||||
|
||||
class OrderViewModel extends BaseUIModel {}
|
||||
29
lib/home/reserve_view.dart
Normal file
29
lib/home/reserve_view.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
3
lib/home/reserve_view_model.dart
Normal file
3
lib/home/reserve_view_model.dart
Normal file
@@ -0,0 +1,3 @@
|
||||
import 'package:cashier_reserve/common/base/ui_model.dart';
|
||||
|
||||
class ReserveViewModel extends BaseUIModel {}
|
||||
Reference in New Issue
Block a user