flutter загрузка базы данных по кнопке

Сделал кнопку в приложении, замысел такой, что по её нажатию происходит обновление базы данных sqlite в приложении

actions: [
              IconButton(
                icon: Icon(Icons.refresh),
                onPressed: () async {
                  await DatabaseProvider.updateDatabase();
                },
              ),
            ],
Указал функцию, чтобы по кнопке происходила загрузка базы данных, обновление. Но этого не происходит.

  static void updateDatabase() async {
    String fileName = 'database.sqlite';
    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = File('$dir/$fileName');
    // Удаление старой базы данных
    await file.delete();
    // Скачивание новой базы данных и запись её в файл
    String url = 'https://site.com/database.sqlite';
    http.Response response = await http.get(Uri.parse(url));
    await file.writeAsBytes(response.bodyBytes);
    // Открытие базы данных
    Database database = await DatabaseProvider.open(file);
    // Использование базы данных
    // ...
  }

Полный код

import 'dart:io';

import 'package:flutterapp/article.dart';
import 'package:path/path.dart';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'package:http/http.dart' as http;
class DatabaseProvider {
  static Database _database;

  static Future<Database> open(File file) async {
    if (_database != null) {
      return _database;
    }

    _database = await openDatabase(
      file.path,
      version: 1,
      onCreate: (db, version) async {
        // Код создания базы данных
      },
      onUpgrade: (db, oldVersion, newVersion) async {
        // Код обновления базы данных
      },
    );

    return _database;
  }

  static void updateDatabase() async {
    String fileName = 'database.sqlite';
    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = File('$dir/$fileName');
    // Удаление старой базы данных
    await file.delete();
    // Скачивание новой базы данных и запись её в файл
    String url = 'https://site.com/database.sqlite';
    http.Response response = await http.get(Uri.parse(url));
    await file.writeAsBytes(response.bodyBytes);
    // Открытие базы данных
    Database database = await DatabaseProvider.open(file);
    // Использование базы данных
    // ...
  }


  static final DatabaseProvider _singleton = DatabaseProvider._internal();

  factory DatabaseProvider() {
    return _singleton;
  }

  DatabaseProvider._internal();

  Future<Database> init() async {
    var databasesPath = await getDatabasesPath();
    var path = join(databasesPath, "database.sqlite");

    try {
      await Directory(dirname(path)).create(recursive: true);
    } catch (_) {}

    ByteData data = await rootBundle.load(join("assets", "database.sqlite"));
    List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    await new File(path).writeAsBytes(bytes, flush: true);

    var db = await openDatabase(path, readOnly: true);
    return db;
  }

  Future<Database> get database async {
    if (_database != null) return _database;
    _database = await init();
    return _database;
  }

Подскажите, что не так в этом коде или вообще чисто фактически flutter такое действо не допускает?


Ответы (0 шт):