如何在另一个类中使用创建的列表?
Posted
技术标签:
【中文标题】如何在另一个类中使用创建的列表?【英文标题】:How to use a created list in another class? 【发布时间】:2021-08-19 15:21:22 【问题描述】:当我创建一个列表时,我只能在我创建列表的类中使用它。但是在另一个类中,当我想使用列表时,我得到一个错误“未定义的名称”。我如何才能访问该列表?
例如,在我的代码中,我用字符串创建了一个“计划”列表。
class _PlanOverviewState extends State<PlanOverview>
List<String> plans = ['Plan A', 'Plan B'];
void addPlan(String neuerPlan)
setState(()
plans.add(neuerPlan);
);
Navigator.of(context).pop();
现在我想从 Appbar 中另一个 Widget 中的列表计划中输出一个字符串作为标题,以便用户知道他在哪里。
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(title: Text(plans[i]))
我如何才能访问列表计划?
【问题讨论】:
【参考方案1】:一种选择是为您的State
类创建和使用InheritedWidget
样式的访问器,然后您可以从任何后代context
访问它。
import 'package:flutter/material.dart';
class InheritedWidgetPage extends StatefulWidget
@override
_InheritedWidgetPageState createState() => _InheritedWidgetPageState();
static _InheritedWidgetPageState of(BuildContext context) =>
context.findAncestorStateOfType<_InheritedWidgetPageState>();
class _InheritedWidgetPageState extends State<InheritedWidgetPage>
List<String> plans = ['Plan A', 'Plan B'];
@override
Widget build(BuildContext context)
return MaterialApp(
home: HomePage(),
);
class HomePage extends StatelessWidget
@override
Widget build(BuildContext context)
_InheritedWidgetPageState _state = InheritedWidgetPage.of(context);
return Scaffold(
appBar: AppBar(
title: Text(_state.plans[0]),
),
body: Center(
child: ElevatedButton(
child: Text('Goto $_state.plans[1]'),
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(builder: (context) => PlanPage(1))),
),
),
);
class PlanPage extends StatelessWidget
final int index;
PlanPage(this.index);
@override
Widget build(BuildContext context)
_InheritedWidgetPageState _state = InheritedWidgetPage.of(context);
return Scaffold(
appBar: AppBar(
title: Text(_state.plans[index]),
),
body: Center(
child: Text('You are here: $_state.plans[index]'),
),
);
一开始这可能会让人很困惑,但随着您对Flutter's declarative framework 的熟悉,它会变得更有意义。
要使上面的示例正常工作,您需要有一个 MaterialApp
祖先小部件,并且您的 State
类(您持有 plans
状态对象的位置)需要是它的父级。我在similar question here 上解释了原因。
您的另一个选择是使用State Management package of which there are lots,它可以帮助您简化对状态对象的访问。
【讨论】:
以上是关于如何在另一个类中使用创建的列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何将小部件连接到在一个类中声明的自定义信号,同时在另一个类中