可重复使用的TextStyle或BoxDecoration中有Future功能-SharedPrefs-如何操作



我正在根据应用内设置从共享首选项中检索变量数据,但我很难将其动态应用于可重复使用的BoxDecoration或TextStyle。

例如,假设这是我的代码:

import 'package:baler_bonus/notifiers_providers/settings_notifier.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
@override
Widget build(BuildContext context) {
return Consumer<SettingsNotifier>(
builder: (context, notifier, child) {
return Container(
decoration: BoxDecoration(
color: notifier.selectedColor,
),
child: Text(
'',
style: TextStyle(
fontSize: notifier.selectedSize,
),
),
);
}
);
}
}

因此,我希望使用decoration: kDecorationstyle: kTextStyle

到目前为止,我已经尝试了:1。

class KTextStyle {
getFontSize() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
double size = prefs.getDouble("fontSize");
return size;
}
static TextStyle mainBody(BuildContext context) {
return Theme.of(context)
.textTheme
.bodyText1
.copyWith(fontSize: getFontSize());
}
}

由此我得到了一个错误:实例成员不能从静态方法访问。

如果我从TextStyle中删除static,我会得到错误";无法使用静态访问来访问实例成员"mainBody"如果我向getFontSize函数添加static;类型"Future"不是类型"double"的子类型;

我还尝试过:2.

final kTextStyle = Consumer<SettingsNotifier>(
builder: (context, child, notifier) {
return TextStyle(
fontSize: notifier.selectedSize,
)
}
);

我得到错误";返回类型"TextStyle"不是闭包上下文所要求的"Widget">

最后我尝试了:3.

void kTextStyle() {
return Consumer<SettingsNotifier>(
builder: (buildContext, notifier, child) {
return TextStyle(
fontSize: notifier.selectedSize,
),
},
)
}

我得到错误";无法从函数"kTextStyle"返回"Consumer"类型的值,因为它的返回类型为"void">

我将感谢您的时间来帮助修复或重新编码以实现

我不明白为什么要将这种类型的数据存储在共享Pref中,因为它是异步函数,需要时间才能取回数据。但是你可以像这样把它存储在类中

class ChagneItemValues {
static const double fontSize = 1.0;
static const double padding = 10.0;

}

最新更新