我有些扑朔迷离。 我有两个小部件“详细信息”屏幕,因此在第一个“详细信息”中,我有一个列表,我想不使用导航器将其发送到第二个“屏幕”。
所以,如果有人可以帮助我,我将非常感激。
详细信息:
List<String> _instructions = [];
class Details extends StatefulWidget {
@override
_DetailsState createState() => new _DetailsState();
}
class _DetailsState extends State<Details> {
Expanded(
child: Container(
margin: EdgeInsets.all(3),
child: OutlineButton(
highlightElevation: 21,
color: Colors.white,
shape: StadiumBorder(),
textColor: Colors.lightBlue,
child: Text(
'ENVOYER',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
fontStyle: FontStyle.normal,
color: Colors.lightBlue,
),
),
borderSide: BorderSide(
color: Colors.lightBlue,
style: BorderStyle.solid,
width: 1),
onPressed: () {
},
),
),
),
}}
所以我想要的是,当我按下按钮时,我会将列表发送到下一个小部件,而无需使用导航器。
答案 0 :(得分:0)
您可以使用sharedpreferance,这是属于应用程序的简单xml。这就是您可以设置的方式
Future<bool> setStringList(String key, List<String> value) =>
_setValue('StringList', key, value);
Future<bool> setStringList (
String key,
List<String> value
)
有关更多信息,这里是link 您可以通过以下方式获取列表
List<String> getStringList(String key) {
List<Object> list = _preferenceCache[key];
if (list != null && list is! List<String>) {
list = list.cast<String>().toList();
_preferenceCache[key] = list;
}
return list;
}
您还可以使用sqflite
答案 1 :(得分:0)
我认为更合适的方法应该类似于使用片段模式或主从流程将android片段彼此连接的方式。 我创建了an example repository来展示完整的概念。 简而言之,想法是创建一个内部带有StreamController的类。这两个小部件都将引用bloc实例。当第一个小部件要向第二个发送数据时,它将一个新项添加到Stream中。第二个监听流并相应地更新其内容。
内部集团:
StreamController<String> _selectedItemController = new BehaviorSubject();
Stream<String> get selectedItem => _selectedItemController.stream;
void setSelected(String item) {
_selectedItemController.add(item);
}
第一个片段:
class FragmentList extends StatelessWidget {
final Bloc bloc;
const FragmentList(
this.bloc, {
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: bloc.selectedItem,
initialData: "",
builder: (BuildContext context, AsyncSnapshot<String> screenType) {
return ListView.builder(
itemBuilder: (context, index) {
return ListTile(
selected: bloc.items[index] == screenType.data,
title: Text(bloc.items[index]),
onTap: () {
bloc.setSelected(bloc.items[index]);
},
);
},
itemCount: bloc.items.length,
);
},
);
}
}
第二个片段:
class FragmentDetails extends StatelessWidget {
final Bloc bloc;
const FragmentDetails(
this.bloc, {
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: StreamBuilder(
initialData: "Nothing selected",
stream: bloc.selectedItem,
builder: (BuildContext context, AsyncSnapshot<String> screenType) {
final info = screenType.data;
return Text(info);
},
),
);
}
}
答案 2 :(得分:0)
假设您有两个页面,即“ page1.dart”和“ page2.dart”,都希望访问同一列表:
创建另一个dart文件'GlobalVariables.dart',在该文件内,创建一个类gv。
在此类gv内,使用以下方法创建静态列表:
static List <String> listAnyList = [];
在需要访问此列表的2个页面中导入“ GlobalVariables.dart”。
现在,在page1.dart和page2.dart中, 您可以使用gv.listAnyList访问“全局列表”。
如果许多dart文件中需要变量,请使用“全局静态变量”。 “用户ID”,那么您只需使用gv.strUserID即可在所需的任何页面中访问它。