ফ্লাটার অ্যাপ থেকে ফাইল সেভ করা

ফ্লাটার অ্যাপ মাল্টি প্লাটফর্ম হওয়াতে কোন ফাইল সেভ করা একটু কমপ্লিকেটেড। একাধিক ডিভাইসের পারমিশন দেখতে হয়। আবার একেক ডিভাইসে একেক নিয়ম। আমি কয়েকটা প্যাকেজ ট্রাই করেছি। সবচেয়ে সহজ একটা প্যাকেজ হচ্ছে document_file_save_plus। এটার প্যাকেজ ডিরেক্টরিতে যে ভার্সন রয়েছে, তা দেখতেছি অনেক পুরাতন। গিটহাব থেকে লেটেস্ট ভার্সন ব্যবহার করতে পারিঃ

  document_file_save_plus:
    git:
      url: https://github.com/advoques/document_file_save_plus

বাকি কাজ সহজঃ

import 'dart:typed_data';
import 'package:document_file_save_plus/document_file_save_plus.dart';
import 'package:flutter/material.dart';
import 'dart:convert';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('document_file_save_plus Plugin')),
        body: const Center(
          child: Text(
            'Please check file in Download folder (or Files App in iOS)',
          ),
        ),
        floatingActionButton: Builder(
          builder:
              (context) => FloatingActionButton(
                onPressed: () => _saveFile(context),
                tooltip: 'Save File',
                child: const Icon(Icons.add),
              ),
        ),
      ),
    );
  }

  void _saveFile(BuildContext context) async {
    List<int> textBytes = utf8.encode("Some data");
    Uint8List textBytes1 = Uint8List.fromList(textBytes);

    try {
      await DocumentFileSavePlus().saveFile(
        textBytes1,
        "new file with permission.html",
        "text/html",
      );

      ScaffoldMessenger.of(
        context,
      ).showSnackBar(const SnackBar(content: Text("File saved successfully!")));
    } catch (e) {
      ScaffoldMessenger.of(
        context,
      ).showSnackBar(SnackBar(content: Text("Failed to save file: $e")));
    }
  }
}

অ্যান্ড্রয়েডের ক্ষেত্রে এই পার্মিশন লাগবেঃ

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOS এর ক্ষেত্রে আলাদা কোন পার্মিশন লাগবে না। এই তো।

Leave a Comment