地区选择和罗盘十字

This commit is contained in:
cxc
2022-06-27 17:37:25 +08:00
parent 8cb96b4c5e
commit 2a933199ed
8 changed files with 632 additions and 263 deletions

View File

@ -0,0 +1,35 @@
import 'package:flutter/material.dart';
class CrossPaint extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.transparent,
alignment: Alignment.center,
child: CustomPaint(
// 使用CustomPaint 背景画板
painter: MyPainter(),
),
);
}
}
class MyPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
// 创建画笔
final Paint paintLine = Paint()
..color = Colors.grey
..strokeWidth = 2;
// 绘制线
canvas.drawLine(Offset(-400, 0), Offset(400, 0), paintLine);
canvas.drawLine(Offset(0, 500), Offset(0, -440), paintLine);
// 创建画笔
// final Paint paintPoint = Paint()..color = Colors.red;
// 绘制圆点
// canvas.drawCircle(Offset(0, 0), 10, paintPoint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => false;
}

View File

@ -0,0 +1,164 @@
import 'package:flutter/material.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:provider/provider.dart';
import '../states/region.dart';
class RegionSelector extends StatelessWidget {
const RegionSelector({Key key}) : super(key: key);
// 拼接城市
String spliceCityName(String pname, String cname) {
if (pname == '') return '未选择城市';
StringBuffer sb = StringBuffer();
sb.write(pname);
// if (cname == '') return sb.toString();
if (cname == '') return '未选择城市';
sb.write(' - ');
sb.write(cname);
return sb.toString();
}
@override
Widget build(BuildContext context) {
return SizedBox(
height: 100,
child: Consumer<RegionProvider>(
builder: (context, regionProvider, child) => Column(
children: [
InkWell(
onTap: () {
Pickers.showAddressPicker(context,
addAllItem: false,
initProvince: regionProvider.provinceName,
initCity: regionProvider.cityName,
onConfirm: (p, c, t) {
regionProvider.updateRegion(p, c);
});
},
child: Container(
constraints: const BoxConstraints(minHeight: 42),
padding: const EdgeInsets.fromLTRB(10, 0, 12, 0),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(6),
),
child: Row(
// mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(spliceCityName(
regionProvider.tempProvinceName,
regionProvider.tempCityName)),
// SizedBox(width: 8),
Row(
children: [
InkWell(
child: Icon(Icons.close,
size: 20, color: Colors.grey[500]),
onTap: () {}),
Icon(Icons.keyboard_arrow_down,
size: 28, color: Colors.grey[500]),
],
)
],
)),
),
],
)));
}
}
// class RegionSelector extends StatefulWidget {
// const RegionSelector({Key key}) : super(key: key);
//
// @override
// State<RegionSelector> createState() => _RegionSelectorState();
// }
//
// class _RegionSelectorState extends State<RegionSelector> {
// final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
//
// // final rp = RegionProvider()
// String provinceName;
// String cityName;
//
// @override
// initState() {
// // provinceName = Provider.of<RegionProvider>(context).provinceName;
// // cityName = Provider.of<RegionProvider>(context).cityName;
// _prefs.then((prefs) {
// if (prefs.getString('REGION') != null) {
// final region =
// RegionData.fromJson(jsonDecode(prefs.getString('REGION')));
// provinceName = region.provinceName;
// cityName = region.cityName;
// }
// });
// }
//
// // 拼接城市
// String spliceCityName(String pname, String cname) {
// if (pname == '') return '未选择城市';
// StringBuffer sb = StringBuffer();
// sb.write(pname);
// if (cname == '') return sb.toString();
// sb.write(' - ');
// sb.write(cname);
// return sb.toString();
// }
//
// @override
// Widget build(BuildContext context) {
// return SizedBox(
// height: 100,
// child: Consumer<RegionProvider>(
// builder: (context, regionProvider, child) => Column(
// children: [
// InkWell(
// onTap: () {
// Pickers.showAddressPicker(context,
// addAllItem: false,
// initProvince: regionProvider.provinceName,
// initCity: regionProvider.cityName,
// onConfirm: (p, c, t) {
// regionProvider.updateRegion(p, c);
// setState(() {
// provinceName = p;
// cityName = c;
// });
// });
// },
// child: Container(
// constraints: const BoxConstraints(minHeight: 42),
// padding: const EdgeInsets.fromLTRB(10, 0, 12, 0),
// decoration: BoxDecoration(
// border: Border.all(color: Colors.grey),
// borderRadius: BorderRadius.circular(6),
// ),
// child: Row(
// // mainAxisSize: MainAxisSize.min,
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// Text(spliceCityName(regionProvider.provinceName,
// regionProvider.cityName)),
// // SizedBox(width: 8),
// Row(
// children: [
// InkWell(
// child: Icon(Icons.close,
// size: 20, color: Colors.grey[500]),
// onTap: () {}),
// Icon(Icons.keyboard_arrow_down,
// size: 28, color: Colors.grey[500]),
// ],
// )
// ],
// )),
// ),
// ],
// )));
// }
// }