Я использую json для извлечения данных из моей базы данных, теперь я хочу использовать эти динамические данные в просмотре списка, всякий раз, когда вы нажимаете на любой из них, он переходит на другую страницу, которая снова использует динамические данные, которые выбираются до.
Вот модель данных для моего JSON:
class Base{
//the type of our object is the array
List <Device> array;
List<Device> devices;
Base( {this.devices});
factory Base.fromJson(Map<String,dynamic> parsedJson){
var list = parsedJson['devices'] as List;
List<Device> deviceList = list.map((i) => Device.fromJson(i)).toList();
return Base(
devices: deviceList
);
}
}
class Device {
String device_desc,device_title,image_path;
int status_id;
List<function> functions;
Status statuss ;
Device({this.device_desc,this.device_title,this.image_path,this.status_id,this.functions,this.statuss});
factory Device.fromJson(Map<String,dynamic>parsedJson){
//var functionFromJson=parsedJson["function"];
//List<function> functionList=functionFromJson.cast<function>();
var list = parsedJson['functions'] as List;
List<function> functionList=list.map((i)=>function.fromJson(i)).toList();
return Device(
device_desc: parsedJson["device_desc"],
device_title: parsedJson["device_title"],
image_path: parsedJson["image_path"],
status_id: parsedJson["status_id"],
functions: functionList,
statuss: Status.fromJson(parsedJson['statuss'])
);
}
}
class Status {
String status_desc, status_title;
Status({this.status_desc,this.status_title});
factory Status.fromJson(Map<String,dynamic>parsedJson){
return Status(
status_desc: parsedJson["status_desc"],
status_title: parsedJson["status_title"],
);
}
}
class function {
String function_desc, function_title;
int device_id, status;
function ({this.function_desc,this.function_title,this.device_id,this.status});
factory function.fromJson(Map<String,dynamic> parsedJson){
return function(
function_desc: parsedJson["function_desc"],
function_title:parsedJson["function_title"],
device_id: parsedJson["device_id"],
status: parsedJson["status"]
);
}
}
Теперь я перемещаю данные на вторую страницу следующим образом:
(этот навигатор находится в виде списка. строитель, поэтому мы можем использовать индекс)
onPressed: () { Navigator.push(context,MaterialPageRoute(builder: (context)=> MyHomePage2(snapshot.data.devices[index]))); },
Я определил переменную, это тип Device, и я использую конструктор, чтобы иметь возможность задавать различные динамические данные:
Class MyHomePage2 extends StatefulWidget {
final Device devices2;
MyHomePage2(this.devices2);
@override
_MyHomePage2State createState() => new _MyHomePage2State();
}
но всякий раз, когда я хочу использовать переменную с именем devices2, например, код ниже:
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('خانه هوشمند'),
),
body: ListView(
//the main list containing stack , device image,device name
children: <Widget>[
new Container(
//for appropriate image size I use container
padding: EdgeInsets.all(50.0),
child: ListView(
//contains devicename and image
physics: new NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: <Widget>[
ListView(
physics: new NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: <Widget>[
new Image.asset('images/acc.png',fit: BoxFit.fitWidth,),
new Text('نام دستگاه',textAlign: TextAlign.right,style: TextStyle(fontSize: 25.0,color: Colors.teal),),
new Text(devices2[0].device_title,textAlign: TextAlign.right,style: TextStyle(fontSize: 20.0,color: Colors.blueGrey),),
],
),
],
),
),
Это приведет к ошибке
[dart] Неопределенное имя 'devices2'.
Tnx за любую помощь:)