файл базы данных 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()

→ Ссылка