选择罗盘图片
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import 'package:fengshui_compass/bottom_navigation_widget.dart';
|
import 'package:fengshui_compass/bottom_navigation_widget.dart';
|
||||||
|
import 'package:fengshui_compass/states/compass_image.dart';
|
||||||
import 'package:fengshui_compass/states/region.dart';
|
import 'package:fengshui_compass/states/region.dart';
|
||||||
import 'package:fengshui_compass/states/token.dart';
|
import 'package:fengshui_compass/states/token.dart';
|
||||||
import 'package:fengshui_compass/utils/color.dart';
|
import 'package:fengshui_compass/utils/color.dart';
|
||||||
@ -25,6 +26,7 @@ class MyApp extends StatelessWidget {
|
|||||||
create: (context) => RegionProvider(),
|
create: (context) => RegionProvider(),
|
||||||
),
|
),
|
||||||
ChangeNotifierProvider(create: (context) => TokenProvider()),
|
ChangeNotifierProvider(create: (context) => TokenProvider()),
|
||||||
|
ChangeNotifierProvider(create: (context) => CompassImageProvider())
|
||||||
],
|
],
|
||||||
child: MaterialApp(
|
child: MaterialApp(
|
||||||
title: '风水罗盘',
|
title: '风水罗盘',
|
||||||
|
@ -57,13 +57,13 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
lunar_month = date.month;
|
lunar_month = date.month;
|
||||||
lunar_day = date.day;
|
lunar_day = date.day;
|
||||||
|
|
||||||
_controllerDate.text = "${lunar_year}年${lunar_month}月${lunar_day}日";
|
_controllerDate.text = "${lunar_year}年${lunar_month}月${lunar_day}日 $hour时$minute分";
|
||||||
} else {
|
} else {
|
||||||
year = date.year;
|
year = date.year;
|
||||||
month = date.month;
|
month = date.month;
|
||||||
day = date.day;
|
day = date.day;
|
||||||
|
|
||||||
_controllerDate.text = "${year}年${month}月${day}日";
|
_controllerDate.text = "${year}年${month}月${day}日 $hour时$minute分";
|
||||||
}
|
}
|
||||||
// _controllerDate.text = year.toString()+"年"+month.toString()+"月"+day.toString()+"日";
|
// _controllerDate.text = year.toString()+"年"+month.toString()+"月"+day.toString()+"日";
|
||||||
});
|
});
|
||||||
@ -99,7 +99,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_showDateTimePicker() {
|
_showDateTimePicker() {
|
||||||
Pickers.showDatePicker(context, mode: DateMode.YMDHMS, onConfirm: (p) {
|
Pickers.showDatePicker(context, mode: DateMode.YMDHM, onConfirm: (p) {
|
||||||
setState(() {
|
setState(() {
|
||||||
hour = p.hour;
|
hour = p.hour;
|
||||||
minute = p.minute;
|
minute = p.minute;
|
||||||
@ -141,7 +141,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
month = json.decode(tmp)['cMonth'];
|
month = json.decode(tmp)['cMonth'];
|
||||||
day = json.decode(tmp)['cDay'];
|
day = json.decode(tmp)['cDay'];
|
||||||
|
|
||||||
_controllerDate.text = "${lunar_year}年${lunar_month}月${lunar_day}日";
|
_controllerDate.text = "${lunar_year}年${lunar_month}月${lunar_day}日 $hour时$minute分";
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
lunar_month = json.decode(tmp)['lMonth'];
|
lunar_month = json.decode(tmp)['lMonth'];
|
||||||
lunar_day = json.decode(tmp)['lDay'];
|
lunar_day = json.decode(tmp)['lDay'];
|
||||||
|
|
||||||
_controllerDate.text = "${year}年${month}月${day}日";
|
_controllerDate.text = "${year}年${month}月${day}日 $hour时$minute分";
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -345,6 +345,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
borderRadius: BorderRadius.circular(30)),
|
borderRadius: BorderRadius.circular(30)),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: Column(
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
@ -394,7 +395,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
backgroundColor: MaterialStateProperty.all(
|
backgroundColor: MaterialStateProperty.all(
|
||||||
isLunar
|
isLunar
|
||||||
? Colors.transparent
|
? Colors.transparent
|
||||||
: Color(0xCFA77300)),
|
: const Color(0xCFA77300)),
|
||||||
shape: MaterialStateProperty.all(
|
shape: MaterialStateProperty.all(
|
||||||
RoundedRectangleBorder(
|
RoundedRectangleBorder(
|
||||||
borderRadius:
|
borderRadius:
|
||||||
@ -432,7 +433,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
day = json.decode(tmp)['cDay'];
|
day = json.decode(tmp)['cDay'];
|
||||||
|
|
||||||
_controllerDate.text =
|
_controllerDate.text =
|
||||||
"${lunar_year}年${lunar_month}月${lunar_day}日 $hour时$minute分";
|
"$lunar_year年$lunar_month月$lunar_day日 $hour时$minute分";
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -446,7 +447,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor: MaterialStateProperty.all(
|
backgroundColor: MaterialStateProperty.all(
|
||||||
isLunar
|
isLunar
|
||||||
? Color(0xCFA77300)
|
? const Color(0xCFA77300)
|
||||||
: Colors.transparent),
|
: Colors.transparent),
|
||||||
shape: MaterialStateProperty.all(
|
shape: MaterialStateProperty.all(
|
||||||
RoundedRectangleBorder(
|
RoundedRectangleBorder(
|
||||||
@ -456,7 +457,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
))
|
))
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const Padding(padding: EdgeInsets.only(top: 80)),
|
const Padding(padding: EdgeInsets.only(top: 40)),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const Padding(
|
const Padding(
|
||||||
@ -464,7 +465,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
left: 10,
|
left: 10,
|
||||||
right: 10,
|
right: 10,
|
||||||
),
|
),
|
||||||
child: Text("出生日期:", style: TextStyle(fontSize: 18)),
|
child: Text("出生时间:", style: TextStyle(fontSize: 18)),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TextField(
|
child: TextField(
|
||||||
@ -510,7 +511,7 @@ class _BirthCalState extends State<BirthCalPage> {
|
|||||||
// icon: Icon(Icons.timelapse_outlined))
|
// icon: Icon(Icons.timelapse_outlined))
|
||||||
// ],
|
// ],
|
||||||
// ),
|
// ),
|
||||||
Padding(padding: EdgeInsets.only(top: 80)),
|
const Padding(padding: EdgeInsets.only(top: 40)),
|
||||||
// 切换奇门类型,单选框
|
// 切换奇门类型,单选框
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
|
@ -8,10 +8,13 @@ import 'package:fengshui_compass/pages/login_page.dart';
|
|||||||
import 'package:fengshui_compass/states/region.dart';
|
import 'package:fengshui_compass/states/region.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_serial_port_api/flutter_serial_port_api.dart';
|
import 'package:flutter_serial_port_api/flutter_serial_port_api.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:stream_transform/stream_transform.dart';
|
import 'package:stream_transform/stream_transform.dart';
|
||||||
|
|
||||||
import '../components/region_selector.dart';
|
import '../components/region_selector.dart';
|
||||||
|
import '../states/compass_image.dart';
|
||||||
import '../utils/recv_parse.dart';
|
import '../utils/recv_parse.dart';
|
||||||
|
|
||||||
class CompassPage extends StatefulWidget {
|
class CompassPage extends StatefulWidget {
|
||||||
@ -44,6 +47,9 @@ class _CompassState extends State<CompassPage> {
|
|||||||
var listb = [];
|
var listb = [];
|
||||||
var listc = [];
|
var listc = [];
|
||||||
|
|
||||||
|
//从相册选择的图片名称
|
||||||
|
String selectedImageName;
|
||||||
|
|
||||||
void initDevice() {}
|
void initDevice() {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -290,6 +296,11 @@ class _CompassState extends State<CompassPage> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initCompassImage() async {
|
||||||
|
final directory =
|
||||||
|
await getApplicationDocumentsDirectory(); // AppData directory
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
@ -329,6 +340,8 @@ class _CompassState extends State<CompassPage> {
|
|||||||
constraints: const BoxConstraints(minHeight: 600),
|
constraints: const BoxConstraints(minHeight: 600),
|
||||||
child: Consumer<RegionProvider>(
|
child: Consumer<RegionProvider>(
|
||||||
builder: (builder, regionProvider, child) {
|
builder: (builder, regionProvider, child) {
|
||||||
|
return Consumer<CompassImageProvider>(
|
||||||
|
builder: (builder, compassImageProvider, child) {
|
||||||
return Stack(
|
return Stack(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
@ -345,12 +358,20 @@ class _CompassState extends State<CompassPage> {
|
|||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
Transform.rotate(
|
Transform.rotate(
|
||||||
angle: myaw * pi / 360 +
|
angle: (myaw + regionProvider.declination) *
|
||||||
regionProvider.declination,
|
2 *
|
||||||
child: const Image(
|
pi /
|
||||||
image: AssetImage(
|
360,
|
||||||
|
child: Image(
|
||||||
|
width: 700,
|
||||||
|
height: 700,
|
||||||
|
// alignment: Alignment.bottomLeft,
|
||||||
|
// image: compassImageProvider.rotateImage,
|
||||||
|
image: compassImageProvider
|
||||||
|
.rotateImage ??
|
||||||
|
const AssetImage(
|
||||||
"assets/images/compass_rotated.png"),
|
"assets/images/compass_rotated.png"),
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.contain),
|
||||||
),
|
),
|
||||||
Align(
|
Align(
|
||||||
alignment: FractionalOffset(w_x, w_y),
|
alignment: FractionalOffset(w_x, w_y),
|
||||||
@ -397,10 +418,20 @@ class _CompassState extends State<CompassPage> {
|
|||||||
icon: const Icon(Icons.settings, color: Colors.amber),
|
icon: const Icon(Icons.settings, color: Colors.amber),
|
||||||
)),
|
)),
|
||||||
Positioned(
|
Positioned(
|
||||||
top: 45,
|
top: 5,
|
||||||
right: 8,
|
left: 8,
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
onPressed: () => selectRegion(),
|
onPressed: () {
|
||||||
|
ImagePicker()
|
||||||
|
.pickImage(source: ImageSource.gallery)
|
||||||
|
.then((res) {
|
||||||
|
if (res == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
compassImageProvider.setSelectedRotateImage(res);
|
||||||
|
});
|
||||||
|
},
|
||||||
icon: const Icon(Icons.photo, color: Colors.amber),
|
icon: const Icon(Icons.photo, color: Colors.amber),
|
||||||
)),
|
)),
|
||||||
// 最下面一行,ranging value openlaser
|
// 最下面一行,ranging value openlaser
|
||||||
@ -487,6 +518,7 @@ class _CompassState extends State<CompassPage> {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
|
69
lib/states/compass_image.dart
Normal file
69
lib/states/compass_image.dart
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:path/path.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
class CompassImageProvider extends ChangeNotifier {
|
||||||
|
CompassImageProvider() {
|
||||||
|
loadCompassImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
|
||||||
|
ImageProvider _rotateImage;
|
||||||
|
|
||||||
|
ImageProvider get rotateImage => _rotateImage;
|
||||||
|
|
||||||
|
// 加载罗盘图片
|
||||||
|
void loadCompassImage() async {
|
||||||
|
final prefs = await _prefs;
|
||||||
|
final appDataDirectory = await getApplicationDocumentsDirectory();
|
||||||
|
String pathString = prefs.getString('rotate_image');
|
||||||
|
if (pathString != null) {
|
||||||
|
File file = File(join(appDataDirectory.path, pathString));
|
||||||
|
var isFileExist = await file.exists();
|
||||||
|
if (isFileExist) {
|
||||||
|
_rotateImage = FileImage(file);
|
||||||
|
} else {
|
||||||
|
_rotateImage = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_rotateImage = null;
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSelectedRotateImage(XFile res) async {
|
||||||
|
final appDataDirectory = await getApplicationDocumentsDirectory();
|
||||||
|
print(res.path);
|
||||||
|
String pathString = res.name;
|
||||||
|
if (pathString == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// imageCache.clear();
|
||||||
|
// res.saveTo(join(appDataDirectory.path, res.name));
|
||||||
|
res.saveTo(
|
||||||
|
join(appDataDirectory.path, 'rotate_image${extension(res.name)}'));
|
||||||
|
final prefs = await _prefs;
|
||||||
|
// final appDataDirectory = await getApplicationDocumentsDirectory();
|
||||||
|
|
||||||
|
// File file = File(join(appDataDirectory.path, pathString));
|
||||||
|
// File file =
|
||||||
|
// File(join(appDataDirectory.path, 'rotate_image${extension(res.name)}'));
|
||||||
|
File file = File(res.path);
|
||||||
|
print(file);
|
||||||
|
var isFileExist = await file.exists();
|
||||||
|
print(isFileExist);
|
||||||
|
if (isFileExist) {
|
||||||
|
_rotateImage = FileImage(file);
|
||||||
|
} else {
|
||||||
|
_rotateImage = null;
|
||||||
|
}
|
||||||
|
prefs.setString('rotate_image', 'rotate_image${extension(res.name)}');
|
||||||
|
// prefs.setString('rotate_image', pathString);
|
||||||
|
// imageCache.clearLiveImages();
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
84
pubspec.lock
84
pubspec.lock
@ -43,6 +43,13 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.16.0"
|
version: "1.16.0"
|
||||||
|
cross_file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cross_file
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.3+1"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -102,6 +109,13 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.9"
|
version: "2.1.9"
|
||||||
|
flutter_plugin_android_lifecycle:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_plugin_android_lifecycle
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.6"
|
||||||
flutter_serial_port_api:
|
flutter_serial_port_api:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -128,6 +142,13 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.1.8"
|
version: "7.1.8"
|
||||||
|
http:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "0.13.4"
|
||||||
http_parser:
|
http_parser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -135,6 +156,41 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.1"
|
version: "4.0.1"
|
||||||
|
image_picker:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: image_picker
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.5+3"
|
||||||
|
image_picker_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_android
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.5+1"
|
||||||
|
image_picker_for_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_for_web
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.8"
|
||||||
|
image_picker_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_ios
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.5+5"
|
||||||
|
image_picker_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image_picker_platform_interface
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.5.0"
|
||||||
intl:
|
intl:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -198,6 +254,27 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.1"
|
version: "1.8.1"
|
||||||
|
path_provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.11"
|
||||||
|
path_provider_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_android
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.16"
|
||||||
|
path_provider_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_ios
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.10"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -205,6 +282,13 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.7"
|
version: "2.1.7"
|
||||||
|
path_provider_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_macos
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.6"
|
||||||
path_provider_platform_interface:
|
path_provider_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -34,6 +34,8 @@ dependencies:
|
|||||||
provider: ^6.0.3
|
provider: ^6.0.3
|
||||||
sqflite: ^2.0.2+1
|
sqflite: ^2.0.2+1
|
||||||
path: ^1.8.1
|
path: ^1.8.1
|
||||||
|
image_picker: ^0.8.5+3
|
||||||
|
path_provider: ^2.0.11
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Reference in New Issue
Block a user