This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 41b2f82b9 feat(binding/dart): hide init && change to init (#5742)
41b2f82b9 is described below

commit 41b2f82b9a97362f0ac6dc000060d380502bc8e0
Author: Asuka Minato <[email protected]>
AuthorDate: Tue Mar 11 22:38:15 2025 +0900

    feat(binding/dart): hide init && change to init (#5742)
    
    * hide init && change to init
    
    * reuse fromOperator
    
    * var name
    
    * change to storage api
    
    * fix example
---
 .github/workflows/ci_bindings_dart.yml |  1 +
 bindings/dart/README.md                | 10 +++++-----
 bindings/dart/examples/basic.dart      |  4 ++--
 bindings/dart/lib/opendal.dart         | 36 +++++++++++++++-------------------
 bindings/dart/tests/opendal_test.dart  | 15 +++++++-------
 5 files changed, 31 insertions(+), 35 deletions(-)

diff --git a/.github/workflows/ci_bindings_dart.yml 
b/.github/workflows/ci_bindings_dart.yml
index f874d9dda..5e9390c01 100644
--- a/.github/workflows/ci_bindings_dart.yml
+++ b/.github/workflows/ci_bindings_dart.yml
@@ -77,3 +77,4 @@ jobs:
         working-directory: bindings/dart
         run: |
           dart run tests/opendal_test.dart
+          dart run examples/basic.dart
diff --git a/bindings/dart/README.md b/bindings/dart/README.md
index dd82802de..57e0d32ea 100644
--- a/bindings/dart/README.md
+++ b/bindings/dart/README.md
@@ -10,7 +10,7 @@ Api is designed to be like stdlib style.
 
 This is stdlib
 
-```
+```dart
 import 'dart:io';
 
 void main() async {
@@ -22,12 +22,12 @@ void main() async {
 
 This is opendal
 
-```
-import 'opendal.dart';
+```dart
+import 'package:opendal/opendal.dart';
 
 void main() async {
-  await RustLib.init();
-  final File = FileManager.initOp(schemeStr: "fs", map: {"root": "/tmp"});
+  final storage = await Storage.init(schemeStr: "fs", map: {"root": "/tmp"});
+  final File = storage.initFile();
   // drop-in
   final file = File('file.txt');
   var is_exists = await file.exists();
diff --git a/bindings/dart/examples/basic.dart 
b/bindings/dart/examples/basic.dart
index 9ab8a5dfb..3ba47c5d7 100644
--- a/bindings/dart/examples/basic.dart
+++ b/bindings/dart/examples/basic.dart
@@ -18,8 +18,8 @@
 import '../lib/opendal.dart';
 
 void main() async {
-  await RustLib.init();
-  final File = FileManager.initOp(schemeStr: "fs", map: {"root": "/tmp"});
+  final storage = await Storage.init(schemeStr: "fs", map: {"root": "/tmp"});
+  final File = storage.initFile();
   // drop-in style 
   var testFile = File("test_1.txt");
   assert(!(await testFile.exists()));
diff --git a/bindings/dart/lib/opendal.dart b/bindings/dart/lib/opendal.dart
index d7ceefa11..0736c68b9 100644
--- a/bindings/dart/lib/opendal.dart
+++ b/bindings/dart/lib/opendal.dart
@@ -20,33 +20,29 @@ import 'src/rust/api/opendal_api.dart';
 export 'src/rust/frb_generated.dart';
 export 'src/rust/api/opendal_api.dart';
 
-class FileManager {
+class Storage {
   final Operator _operator;
 
-  FileManager._(this._operator);
+  Storage._(this._operator);
 
-  static FileManager initOp(
-      {required String schemeStr, required Map<String, String> map}) {
-    return FileManager._(Operator(schemeStr: schemeStr, map: map));
+  static Future<Storage> init({
+    required String schemeStr,
+    required Map<String, String> map,
+  }) async {
+    if (!RustLib.instance.initialized) {
+      await RustLib.init();
+    }
+    return Storage._(Operator(schemeStr: schemeStr, map: map));
   }
 
-  File call(String path) {
-    return File._(path: path, operator: _operator);
-  }
-}
-
-class DirectoryManager {
-  final Operator _operator;
-
-  DirectoryManager._(this._operator);
-
-  static DirectoryManager initOp(
-      {required String schemeStr, required Map<String, String> map}) {
-    return DirectoryManager._(Operator(schemeStr: schemeStr, map: map));
+  /// Creates a factory function for creating File objects
+  Function(String) initFile() {
+    return (String path) => File._(path: path, operator: _operator);
   }
 
-  Directory call(String path) {
-    return Directory._(path: path, operator: _operator);
+  /// Creates a factory function for creating Directory objects
+  Function(String) initDir() {
+    return (String path) => Directory._(path: path, operator: _operator);
   }
 }
 
diff --git a/bindings/dart/tests/opendal_test.dart 
b/bindings/dart/tests/opendal_test.dart
index ee1c57063..693b08af1 100644
--- a/bindings/dart/tests/opendal_test.dart
+++ b/bindings/dart/tests/opendal_test.dart
@@ -5,16 +5,16 @@ void main() {
   group('opendal unit test', () {
     group('opendal fs schema', () {
       test('File and Directory functions in fs schema', () async {
-        await RustLib.init();
-        final File = FileManager.initOp(schemeStr: "fs", map: {"root": 
"/tmp"});
+        final storage = await Storage.init(schemeStr: "fs", map: {"root": 
"/tmp"});
+        final File = storage.initFile();
         var testFile = File("test_1.txt");
         expect(await testFile.exists(), false);
 
         var anotherFile = File("test.txt");
         expect(await anotherFile.exists(), false);
 
-        final Directory =
-            DirectoryManager.initOp(schemeStr: "fs", map: {"root": "/tmp"});
+        final Directory = storage.initDir();
+
         var testDir = Directory("test_dir/");
         await testDir.create();
         expect(await testDir.exists(), true);
@@ -23,10 +23,9 @@ void main() {
 
     group('opendal memory schema', () {
       test('File and Directory functions in memory schema', () async {
-        final File =
-            FileManager.initOp(schemeStr: "memory", map: {"root": "/tmp"});
-        final Directory =
-            DirectoryManager.initOp(schemeStr: "memory", map: {"root": 
"/tmp"});
+        final storage = await Storage.init(schemeStr: "memory", map: {"root": 
"/tmp"});
+        final Directory = storage.initDir();
+
         var testDir = Directory("test/");
         await testDir.create();
         expect(

Reply via email to