HarmonyOS 鸿蒙Next shared_preferences无法在main中创建

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next shared_preferences无法在main中创建

UIAbility的onCreate执行前如何获取

class Logger {

constructor(prefix: string) {

this.prefix = prefix;

this.domain = 0xFF00;

let context = getContext();

let applicationContext = context.getApplicationContext();

let cacheDir = applicationContext.cacheDir;

let tempDir = applicationContext.tempDir;

let filesDir = applicationContext.filesDir;

let databaseDir = applicationContext.databaseDir;

let bundleCodeDir = applicationContext.bundleCodeDir;

let distributedFilesDir = applicationContext.distributedFilesDir;

let preferencesDir = applicationContext.preferencesDir;

console.log(context.filesDir);

}

}

export default new Logger(’[Hwork]’);

 但是在构造函数中无法获取 context。  另外,文件如果open后,没有调用close会导致没有及时写入或者其他问题吗


更多关于HarmonyOS 鸿蒙Next shared_preferences无法在main中创建的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以参考demo:

import 'package:flutter/material.dart';

import 'package:shared_preferences/shared_preferences.dart';

void main() async {

  // 初始化 SharedPreferences  

  SharedPreferences prefs = await SharedPreferences.getInstance();

  // 你可以在这里设置一些初始值,或者仅仅是为了确保它已经被加载  

  // await prefs.setString('key', 'value');  

  // 现在你可以将 prefs 传递给 MaterialApp 或其他需要它的组件  

  runApp(MyApp(prefs: prefs));

}

class MyApp extends StatelessWidget {

  final SharedPreferences prefs;

  MyApp({Key? key, required this.prefs}) : super(key: key);

  @override

  Widget build(BuildContext context) {

  return MaterialApp(

  title: 'Flutter Demo',

  home: HomePage(prefs: prefs),

  );

}

}

class HomePage extends StatelessWidget {

  final SharedPreferences prefs;

  HomePage({Key? key, required this.prefs}) : super(key: key);

  @override

  Widget build(BuildContext context) {

  // 现在你可以在任何地方使用 prefs  

  return Scaffold(

  appBar: AppBar(

  title: Text('Home Page'),

  ),

  body: Center(

  child: Text('你可以在这里使用 prefs'),

  ),

  );

}

}

在 Flutter 中,在 main() 函数本身并不支持异步操作。main() 函数必须是一个同步的入口点,它不能返回一个 Future 或者使用 await。

您可以在 main() 函数中启动一个异步操作,即使用 runApp() 之前的异步初始化

import 'package:flutter/material.dart';  

import 'package:shared_preferences/shared_preferences.dart';  

Future<void> setupSharedPreferences() async {  

  SharedPreferences prefs = await SharedPreferences.getInstance();  

  // 在这里进行必要的设置  

  // 例如,设置一个默认值  

  await prefs.setString('myKey', 'defaultValue');  

}  

Future<void> main() async {  

  WidgetsFlutterBinding.ensureInitialized();  

  await setupSharedPreferences(); // 调用初始化函数  

  runApp(MyApp());  

}  

class MyApp extends StatelessWidget {  

  @override  

  Widget build(BuildContext context) {  

    return MaterialApp(  

      title: 'Flutter Demo',  

      home: Scaffold(  

        appBar: AppBar(  

          title: Text('Flutter App'),  

        ),  

        body: Center(  

          child: Text('Hello, World!'),  

        ),  

      ),  

    );  

  }  

}

更多关于HarmonyOS 鸿蒙Next shared_preferences无法在main中创建的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,若遇到shared_preferences无法在main中创建的问题,通常是因为鸿蒙系统对数据存储的访问权限和方式有特定的要求。

首先,确保你的项目已经正确配置了必要的权限,特别是涉及到数据存储的权限。在鸿蒙系统的config.json文件中,检查是否声明了相关的权限,例如读写存储的权限。

其次,鸿蒙系统推荐使用其提供的分布式数据管理能力,例如DistributedKvStore,来替代传统的shared_preferences。虽然shared_preferences在鸿蒙的某些场景下仍然可用,但推荐采用鸿蒙特有的数据管理方式来更好地利用系统特性。

如果确实需要使用shared_preferences,请确认其使用方式符合鸿蒙的API规范。例如,确保在正确的生命周期方法中访问,避免在main方法中直接进行存储操作,因为main方法通常用于初始化应用状态,而不是执行具体的业务逻辑。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。在那里,你可以获得更专业的技术支持和解决方案。

回到顶部