файл базы данных SQLite не создается
Файл базы данных SQLite не создается. Что бы было проще, папке Download телефона должна создаться пустая база данных abc.db После создания, для проверки, должен быть выведен путь. Ничего не происходит, папка пуста, путь не выводится. Что не так? Далее, полный код и скриншоты.
main.dart
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Name App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Name Page'),
),
body: MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _str = 'Hello World!';
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
void _f1() {
setState(() {
});
}
_funInitDb() async {
Directory? folder = await getDownloadsDirectory();
String path = folder!.path.toString() + '/' + 'abc.db';
var db = await openDatabase(path);
//для проверки выводим путь
_str = '${db.path}';
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Align(
alignment: Alignment.topCenter,
child: Container(
width: double.infinity,
margin: const EdgeInsets.all(16.0),
child: RaisedButton(
onPressed: () {
setState(() {
_funInitDb();
});
},
splashColor: Colors.blue.withOpacity(0.5),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10)
),
child: Text(
'OK',
style: TextStyle(
color: Colors.deepPurple,
fontSize: 20.0,
),
),
),
),
),
Align(
alignment: Alignment.center,
child: Text(
_str,
style: TextStyle(
fontSize: 36.0,
color: Colors.green
),
),
),
],
);
}
}
папка в телефоне пуста
скриншот приложения

Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Скорее всего вы не дали разрешения на запись к папке Download.
Добавьте это в manifest (путь к файлу: /android/app/src/main/AndroidManifest.xml):
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Дальше через плагин permission_handler, вы должны узнать статус разрешения. Если оно не выдано, запросить разрешение:
var status = await Permission.storage.status;
if (!status.isGranted) {
await Permission.storage.request();
}
После можно вызывать _funInitDb()