【问题标题】:How can I get context from dart file如何从 dart 文件中获取上下文
【发布时间】:2020-05-14 00:04:41
【问题描述】:

我有这个飞镖文件category_data.dart:

import 'package:flutter/material.dart';

final List categories = [
  'Entertainment',
  'Sports',
  'Politics',
  'Science',
  'Technology',
  'Travel'
];
/*
  you can change your category here.
  If you change, make sure you have changed in the admin panel.
  Otherwise the app will show error.
*/

/*
  if your change the defalut category, make sure your category item munber is equal to category colors item number.
  Example: If you have 5 categories, then remove an color item in the category colors.
  else if you have more than 6 categories, then you have to add color items in the category colors List down below.
*/

final List categoryColors = [
  Colors.orange[200],
  Colors.blue[200],
  Colors.red[200],
  Colors.pink[200],
  Colors.purple[200],
  Colors.blueGrey[400]
];

我想通过 intl 插件添加国际化。为此,我使用以下代码来获取文本的语言环境翻译:

AppLocalizations.of(context).categoryName

那么类别列表将如下:

import 'package:flutter/material.dart';
import 'package:news_app/generated/l10n.dart';

final List categories = [
  AppLocalizations.of(context).entertainment,
  AppLocalizations.of(context).sports,
  AppLocalizations.of(context).politics,
  AppLocalizations.of(context).science,
  AppLocalizations.of(context).technology,
  AppLocalizations.of(context).travel
];

但是这段代码给了我一个错误,因为我没有上下文:

Undefined name 'context'.
Try correcting the name to one that is defined, or defining the name

您如何获得使用国际化的上下文?我只在小部件的构建方法中看到了上下文。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以定义一个方法并将上下文传递给它。

        List _getCategoryList(BuildContext context) {
        return  [
                 AppLocalizations.of(context).entertainment,
                 AppLocalizations.of(context).sports,
                 AppLocalizations.of(context).politics,
                 AppLocalizations.of(context).science,
                 AppLocalizations.of(context).technology,
                 AppLocalizations.of(context).travel
         ];
    }
    

    你可以像这样使用它:

    final List categories = _getCategoryList(context); -- Use this inside your widget.
    

    【讨论】:

      【解决方案2】:

      我之前也遇到过同样的问题,我解决的方法是创建一个GlobalKey:

      static GlobalKey rootWidgetKey = GlobalKey();
      

      然后将其附加到您的根小部件:

      ...
      home: YourRootWidget(
        key: rootWidgetKey,
        ...
      

      然后您可以通过引用rootWidgetKey.currentContext 在任何地方访问root 上下文。

      【讨论】:

        【解决方案3】:

        在构建方法之后添加您的列表,如示例

         @override
         Widget build(BuildContext context) {
         final List categories = [
         AppLocalizations.of(context).entertainment,
         AppLocalizations.of(context).sports,
         AppLocalizations.of(context).politics,
         AppLocalizations.of(context).science,
         AppLocalizations.of(context).technology,
         AppLocalizations.of(context).travel
         ];
         return ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多