首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Provider软件包的颤振常量文件

带有Provider软件包的颤振常量文件
EN

Stack Overflow用户
提问于 2020-05-04 04:30:30
回答 1查看 820关注 0票数 1

我找不出设置一些常量(主要是字符串)的最佳方法。目前,我使用的是一个constants.dart文件,其中只定义了const变量,并在需要时导入它。没有类或任何东西,只有一个空白的dart文件。然而,这是可行的,我最近使用Android Studio中的Flutter Intl插件实现了本地化。我把所有东西都准备好了,可以像这样做S.of(context).settings,它会从正确的文件中得到翻译结果。我的问题来自于我的constants.dart文件中的一些常量字符串列表。我在很多地方使用它们来进行选项选择。它们看起来像这样:

代码语言:javascript
复制
const playType = [
  'RP/Story Focused',
  'Battle/Combat Focused',
  'Puzzles and Challenges',
  'Exploration/Travel',
];
const length = [
  'One Shot',
  '2-5 Sessions',
  '5-10 Sessions',
  'On-going Campaign',
];

我无法将字符串更改为Intl引用,因为没有要传递的上下文。不确定如何设置已加载的类,但不确定如何设置并使用提供程序包为其提供服务。

编辑:这是常量文件。使用提供程序调用它是很好的。当我需要对列表中的字符串使用本地化时,问题就出现了

代码语言:javascript
复制
import 'package:scryer/generated/l10n.dart';

class Constants {
  Constants._();
  static final instance = Constants._();

  static List<String> playType = [
    S.of(context).rpstoryFocused,//need a reference to a context
    'Battle/Combat Focused',
    'Puzzles and Challenges',
    'Exploration/Travel',
  ];
  static const length = [
    'One Shot',
    '2-5 Sessions',
    '5-10 Sessions',
    'On-going Campaign',
  ];
}

下面是我如何在实际页面上调用常量的方法。这是一个按钮,按下后会转到一个新屏幕,该屏幕是多选复选框列表或单选单选按钮列表。我将常量作为列表的参数进行传递

代码语言:javascript
复制
MaterialPageRoute(builder: (context) {
  return MultiSelectScreen(
    args: MultiSelectArguments(
      label: S.of(context).selectPreferredPlayStyle,
      options: playType, //this is the constants list reference
      selections:
        profile.playType,
    ),
  );
})

简单的解决方案是不使用常量,只在这些位置创建列表,我认为只使用了两次,但更好的做法是将其拔出,因为它被多次使用

EN

回答 1

Stack Overflow用户

发布于 2020-05-04 05:06:05

你可以试试。

代码语言:javascript
复制
class Constants {
   final BuildContext context;
   Constants(@required this.context);
 //  static final instance = Constants._();     // to make class a singleton

static  const playType = [
    'RP/Story Focused',
    'Battle/Combat Focused',
    'Puzzles and Challenges',
    'Exploration/Travel',
  ];
static const length = [
    'One Shot',
    '2-5 Sessions',
    '5-10 Sessions',
    'On-going Campaign',
 ];

}

然后,在你的项目的根目录中,你应该像这样提供这个类;

代码语言:javascript
复制
void main() {

/** WidgetsFlutterBinding.ensureInitialized() is required in Flutter v1.9.4+ before using any plugins if the code is executed before runApp. */
  WidgetsFlutterBinding.ensureInitialized();

     runApp( Provider( 
       create: (context) => Constants(context),
       child: MyApp(),
       ),
   );

}

您将能够在窗口小部件树下的任何BuildContext中访问这些常量,如下所示;

代码语言:javascript
复制
final Contants constants = Provider<Constants>.of(context);

你得到的长度常量就像;constants.length

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61581201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档