Flutter 颤振/省道访问另一个列表中的listdata

Flutter 颤振/省道访问另一个列表中的listdata,flutter,dart,Flutter,Dart,我从RestApi得到一个JSON响应,如下所示: [{"_id":"5eee4b3630cff64ee216e4fb", "assignee_user_id":"5eab4a435647780af311d3a7", "task_name":"Another Test work", "task_description":"Test Desc

我从RestApi得到一个JSON响应,如下所示:

    [{"_id":"5eee4b3630cff64ee216e4fb",
"assignee_user_id":"5eab4a435647780af311d3a7",
"task_name":"Another Test work",
"task_description":"Test Description",
"assignee_name":"Test Assignee",
"status":"assigned",
"assignment_date":"20-06-2020 11:15",
"assignor_name":"Test Assignor",
"assignor_remarks":[{"commentTime":"21-06-2020 05:17","comment":"Test Comment"}]}]
import 'dart:convert';

List<Work> workFromMap(String str) => List<Work>.from(json.decode(str).map((x) => Work.fromMap(x)));

String workToMap(List<Work> data) => json.encode(List<dynamic>.from(data.map((x) => x.toMap())));

class Work {
    Work({
        this.id,
        this.assigneeUserId,
        this.taskName,
        this.taskDescription,
        this.assigneeName,
        this.status,        
        this.assignmentDate,
        this.assignorName,        
        this.assignorRemarks,
    });

    String id;
    String assigneeUserId;
    String taskName;
    String taskDescription;
    String assigneeName;
    String status;    
    String assignmentDate;
    String assignorName;
   
    List<AssignorRemark> assignorRemarks;

    factory Work.fromMap(Map<String, dynamic> json) => Work(
        id: json["_id"],
        assigneeUserId: json["assignee_user_id"],
        taskName: json["task_name"],
        taskDescription: json["task_description"],
        assigneeName: json["assignee_name"],
        status: json["status"],        
        assignmentDate: json["assignment_date"],        
        assignorRemarks: List<AssignorRemark>.from(json["assignor_remarks"].map((x) => AssignorRemark.fromMap(x))),
    );

    Map<String, dynamic> toMap() => {
        "_id": id,
        "assignee_user_id": assigneeUserId,
        "task_name": taskName,
        "task_description": taskDescription,
        "assignee_name": assigneeName,
        "status": status,        
        "assignment_date": assignmentDate,        
        "assignor_remarks": List<dynamic>.from(assignorRemarks.map((x) => x.toMap())),
    };
}

class AssignorRemark {
    AssignorRemark({
        this.commentTime,
        this.comment,
    });

    String commentTime;
    String comment;

    factory AssignorRemark.fromMap(Map<String, dynamic> json) => AssignorRemark(
        commentTime: json["commentTime"],
        comment: json["comment"],
    );

    Map<String, dynamic> toMap() => {
        "commentTime": commentTime,
        "comment": comment,
    };
}
import './work.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;

Future<List<Work>> fetchWork() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  final userid = prefs.getString('user_id');
  final response =
      await http.get("https://myserver/api/work-monitor/work/?id=$userid",
    );

  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    print(response.body);
    
    
    return workFromMap(response.body);
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load Profile');
  }
}
class WorkMonitor extends StatefulWidget {
  @override
  _WorkMonitorState createState() => _WorkMonitorState();
}

class _WorkMonitorState extends State<WorkMonitor> {
  Future<Work> futureMyWorkMonitor;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Work Monitor'),
      ),
      body: Container(
        child: FutureBuilder(
          future: fetchWork(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                itemCount: snapshot.data.length,
                shrinkWrap: true,
                itemBuilder: (BuildContext context, index) {
                  Work work = snapshot.data[index];
                  //  return Text('${work.taskName}');
                  return Container(
                    padding: const EdgeInsets.all(5),
                    width: double.infinity,
                    child: Card(
                      child: Container(
                        padding: const EdgeInsets.all(20),
                        child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Subject: ',
                                        style: TextStyle(
                                          fontSize: 20,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Text(
                                      '${work.taskName}',
                                      style: TextStyle(
                                          fontSize: 20, color: Colors.black),
                                    ),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Flexible(
                                        child: Text(
                                      '${work.taskDescription}',
                                    )),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Assigned Date: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.assignmentDate}' ?? " ",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),

                                Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.status}' ?? "Gone",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),
                            
                            Text(
                              
                              '${work.assignorRemarks[index]}'
                              ),
                            ]),
                            
                      ),
                    ),
                  );
                },
              );
            } else if (snapshot.hasError) {
              return Text("${snapshot.error}");
            }

            // By default, show a loading spinner.
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}
podo类的构建如下所示:

    [{"_id":"5eee4b3630cff64ee216e4fb",
"assignee_user_id":"5eab4a435647780af311d3a7",
"task_name":"Another Test work",
"task_description":"Test Description",
"assignee_name":"Test Assignee",
"status":"assigned",
"assignment_date":"20-06-2020 11:15",
"assignor_name":"Test Assignor",
"assignor_remarks":[{"commentTime":"21-06-2020 05:17","comment":"Test Comment"}]}]
import 'dart:convert';

List<Work> workFromMap(String str) => List<Work>.from(json.decode(str).map((x) => Work.fromMap(x)));

String workToMap(List<Work> data) => json.encode(List<dynamic>.from(data.map((x) => x.toMap())));

class Work {
    Work({
        this.id,
        this.assigneeUserId,
        this.taskName,
        this.taskDescription,
        this.assigneeName,
        this.status,        
        this.assignmentDate,
        this.assignorName,        
        this.assignorRemarks,
    });

    String id;
    String assigneeUserId;
    String taskName;
    String taskDescription;
    String assigneeName;
    String status;    
    String assignmentDate;
    String assignorName;
   
    List<AssignorRemark> assignorRemarks;

    factory Work.fromMap(Map<String, dynamic> json) => Work(
        id: json["_id"],
        assigneeUserId: json["assignee_user_id"],
        taskName: json["task_name"],
        taskDescription: json["task_description"],
        assigneeName: json["assignee_name"],
        status: json["status"],        
        assignmentDate: json["assignment_date"],        
        assignorRemarks: List<AssignorRemark>.from(json["assignor_remarks"].map((x) => AssignorRemark.fromMap(x))),
    );

    Map<String, dynamic> toMap() => {
        "_id": id,
        "assignee_user_id": assigneeUserId,
        "task_name": taskName,
        "task_description": taskDescription,
        "assignee_name": assigneeName,
        "status": status,        
        "assignment_date": assignmentDate,        
        "assignor_remarks": List<dynamic>.from(assignorRemarks.map((x) => x.toMap())),
    };
}

class AssignorRemark {
    AssignorRemark({
        this.commentTime,
        this.comment,
    });

    String commentTime;
    String comment;

    factory AssignorRemark.fromMap(Map<String, dynamic> json) => AssignorRemark(
        commentTime: json["commentTime"],
        comment: json["comment"],
    );

    Map<String, dynamic> toMap() => {
        "commentTime": commentTime,
        "comment": comment,
    };
}
import './work.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;

Future<List<Work>> fetchWork() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  final userid = prefs.getString('user_id');
  final response =
      await http.get("https://myserver/api/work-monitor/work/?id=$userid",
    );

  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    print(response.body);
    
    
    return workFromMap(response.body);
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load Profile');
  }
}
class WorkMonitor extends StatefulWidget {
  @override
  _WorkMonitorState createState() => _WorkMonitorState();
}

class _WorkMonitorState extends State<WorkMonitor> {
  Future<Work> futureMyWorkMonitor;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Work Monitor'),
      ),
      body: Container(
        child: FutureBuilder(
          future: fetchWork(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                itemCount: snapshot.data.length,
                shrinkWrap: true,
                itemBuilder: (BuildContext context, index) {
                  Work work = snapshot.data[index];
                  //  return Text('${work.taskName}');
                  return Container(
                    padding: const EdgeInsets.all(5),
                    width: double.infinity,
                    child: Card(
                      child: Container(
                        padding: const EdgeInsets.all(20),
                        child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Subject: ',
                                        style: TextStyle(
                                          fontSize: 20,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Text(
                                      '${work.taskName}',
                                      style: TextStyle(
                                          fontSize: 20, color: Colors.black),
                                    ),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Flexible(
                                        child: Text(
                                      '${work.taskDescription}',
                                    )),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Assigned Date: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.assignmentDate}' ?? " ",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),

                                Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.status}' ?? "Gone",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),
                            
                            Text(
                              
                              '${work.assignorRemarks[index]}'
                              ),
                            ]),
                            
                      ),
                    ),
                  );
                },
              );
            } else if (snapshot.hasError) {
              return Text("${snapshot.error}");
            }

            // By default, show a loading spinner.
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}
导入'dart:convert';
List workFromMap(stringstr)=>List.from(json.decode(str.map)(x)=>Work.fromMap(x));
字符串workToMap(List data)=>json.encode(List.from(data.map)((x)=>x.toMap());
课堂作业{
工作({
这个身份证,
此.assigneeUserId,
这个.taskName,
这是我的描述,
这个.assigneeName,
这个,身份,,
这是转让日期,
这个.assignorName,
这是转让人的标记,
});
字符串id;
字符串assigneeUserId;
字符串taskName;
字符串任务描述;
字符串赋值名;
字符串状态;
字符串赋值日期;
字符串赋值名;
列出转让人标记;
工厂工作。fromMap(Map json)=>工作(
id:json[“_id”],
assigneeUserId:json[“受让人用户id”],
taskName:json[“任务名称”],
taskDescription:json[“任务描述”],
assigneeName:json[“受让人名称”],
状态:json[“状态”],
assignmentDate:json[“assignment_date”],
assignorRemarks:List.from(json[“assignor_备注”].map((x)=>AssignorRemark.fromMap(x)),
);
映射toMap()=>{
“_id”:id,
“受让人用户id”:受让人用户id,
“任务名称”:任务名称,
“任务描述”:任务描述,
“受让人名称”:受让人名称,
“地位”:地位,
“转让日期”:转让日期,
“转让人备注”:List.from(转让人标记.map((x)=>x.toMap()),
};
}
类赋值标记{
转让人标记({
这一次,,
这句话,,
});
字符串注释时间;
字符串注释;
factory AssignorRemark.fromMap(Map json)=>AssignorRemark(
commentTime:json[“commentTime”],
注释:json[“注释”],
);
映射toMap()=>{
“commentTime”:commentTime,
“评论”:评论,
};
}
我的api调用如下:

    [{"_id":"5eee4b3630cff64ee216e4fb",
"assignee_user_id":"5eab4a435647780af311d3a7",
"task_name":"Another Test work",
"task_description":"Test Description",
"assignee_name":"Test Assignee",
"status":"assigned",
"assignment_date":"20-06-2020 11:15",
"assignor_name":"Test Assignor",
"assignor_remarks":[{"commentTime":"21-06-2020 05:17","comment":"Test Comment"}]}]
import 'dart:convert';

List<Work> workFromMap(String str) => List<Work>.from(json.decode(str).map((x) => Work.fromMap(x)));

String workToMap(List<Work> data) => json.encode(List<dynamic>.from(data.map((x) => x.toMap())));

class Work {
    Work({
        this.id,
        this.assigneeUserId,
        this.taskName,
        this.taskDescription,
        this.assigneeName,
        this.status,        
        this.assignmentDate,
        this.assignorName,        
        this.assignorRemarks,
    });

    String id;
    String assigneeUserId;
    String taskName;
    String taskDescription;
    String assigneeName;
    String status;    
    String assignmentDate;
    String assignorName;
   
    List<AssignorRemark> assignorRemarks;

    factory Work.fromMap(Map<String, dynamic> json) => Work(
        id: json["_id"],
        assigneeUserId: json["assignee_user_id"],
        taskName: json["task_name"],
        taskDescription: json["task_description"],
        assigneeName: json["assignee_name"],
        status: json["status"],        
        assignmentDate: json["assignment_date"],        
        assignorRemarks: List<AssignorRemark>.from(json["assignor_remarks"].map((x) => AssignorRemark.fromMap(x))),
    );

    Map<String, dynamic> toMap() => {
        "_id": id,
        "assignee_user_id": assigneeUserId,
        "task_name": taskName,
        "task_description": taskDescription,
        "assignee_name": assigneeName,
        "status": status,        
        "assignment_date": assignmentDate,        
        "assignor_remarks": List<dynamic>.from(assignorRemarks.map((x) => x.toMap())),
    };
}

class AssignorRemark {
    AssignorRemark({
        this.commentTime,
        this.comment,
    });

    String commentTime;
    String comment;

    factory AssignorRemark.fromMap(Map<String, dynamic> json) => AssignorRemark(
        commentTime: json["commentTime"],
        comment: json["comment"],
    );

    Map<String, dynamic> toMap() => {
        "commentTime": commentTime,
        "comment": comment,
    };
}
import './work.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;

Future<List<Work>> fetchWork() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  final userid = prefs.getString('user_id');
  final response =
      await http.get("https://myserver/api/work-monitor/work/?id=$userid",
    );

  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    print(response.body);
    
    
    return workFromMap(response.body);
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load Profile');
  }
}
class WorkMonitor extends StatefulWidget {
  @override
  _WorkMonitorState createState() => _WorkMonitorState();
}

class _WorkMonitorState extends State<WorkMonitor> {
  Future<Work> futureMyWorkMonitor;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Work Monitor'),
      ),
      body: Container(
        child: FutureBuilder(
          future: fetchWork(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                itemCount: snapshot.data.length,
                shrinkWrap: true,
                itemBuilder: (BuildContext context, index) {
                  Work work = snapshot.data[index];
                  //  return Text('${work.taskName}');
                  return Container(
                    padding: const EdgeInsets.all(5),
                    width: double.infinity,
                    child: Card(
                      child: Container(
                        padding: const EdgeInsets.all(20),
                        child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Subject: ',
                                        style: TextStyle(
                                          fontSize: 20,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Text(
                                      '${work.taskName}',
                                      style: TextStyle(
                                          fontSize: 20, color: Colors.black),
                                    ),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Flexible(
                                        child: Text(
                                      '${work.taskDescription}',
                                    )),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Assigned Date: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.assignmentDate}' ?? " ",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),

                                Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.status}' ?? "Gone",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),
                            
                            Text(
                              
                              '${work.assignorRemarks[index]}'
                              ),
                            ]),
                            
                      ),
                    ),
                  );
                },
              );
            } else if (snapshot.hasError) {
              return Text("${snapshot.error}");
            }

            // By default, show a loading spinner.
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}
导入“/work.dart”; 导入“package:shared_preferences/shared_preferences.dart”; 将“package:http/http.dart”导入为http; Future fetchWork()异步{ SharedReferences prefs=等待SharedReferences.getInstance(); final userid=prefs.getString('user_id'); 最后答复= 等待http.get(“https://myserver/api/work-monitor/work/?id=$userid“, ); 如果(response.statusCode==200){ //如果服务器确实返回了200 OK响应, //然后解析JSON。 打印(响应.正文); 返回workFromMap(response.body); }否则{ //如果服务器没有返回200 OK响应, //然后抛出一个异常。 抛出异常(“加载配置文件失败”); } } 我的屏幕文件内容如下:

    [{"_id":"5eee4b3630cff64ee216e4fb",
"assignee_user_id":"5eab4a435647780af311d3a7",
"task_name":"Another Test work",
"task_description":"Test Description",
"assignee_name":"Test Assignee",
"status":"assigned",
"assignment_date":"20-06-2020 11:15",
"assignor_name":"Test Assignor",
"assignor_remarks":[{"commentTime":"21-06-2020 05:17","comment":"Test Comment"}]}]
import 'dart:convert';

List<Work> workFromMap(String str) => List<Work>.from(json.decode(str).map((x) => Work.fromMap(x)));

String workToMap(List<Work> data) => json.encode(List<dynamic>.from(data.map((x) => x.toMap())));

class Work {
    Work({
        this.id,
        this.assigneeUserId,
        this.taskName,
        this.taskDescription,
        this.assigneeName,
        this.status,        
        this.assignmentDate,
        this.assignorName,        
        this.assignorRemarks,
    });

    String id;
    String assigneeUserId;
    String taskName;
    String taskDescription;
    String assigneeName;
    String status;    
    String assignmentDate;
    String assignorName;
   
    List<AssignorRemark> assignorRemarks;

    factory Work.fromMap(Map<String, dynamic> json) => Work(
        id: json["_id"],
        assigneeUserId: json["assignee_user_id"],
        taskName: json["task_name"],
        taskDescription: json["task_description"],
        assigneeName: json["assignee_name"],
        status: json["status"],        
        assignmentDate: json["assignment_date"],        
        assignorRemarks: List<AssignorRemark>.from(json["assignor_remarks"].map((x) => AssignorRemark.fromMap(x))),
    );

    Map<String, dynamic> toMap() => {
        "_id": id,
        "assignee_user_id": assigneeUserId,
        "task_name": taskName,
        "task_description": taskDescription,
        "assignee_name": assigneeName,
        "status": status,        
        "assignment_date": assignmentDate,        
        "assignor_remarks": List<dynamic>.from(assignorRemarks.map((x) => x.toMap())),
    };
}

class AssignorRemark {
    AssignorRemark({
        this.commentTime,
        this.comment,
    });

    String commentTime;
    String comment;

    factory AssignorRemark.fromMap(Map<String, dynamic> json) => AssignorRemark(
        commentTime: json["commentTime"],
        comment: json["comment"],
    );

    Map<String, dynamic> toMap() => {
        "commentTime": commentTime,
        "comment": comment,
    };
}
import './work.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;

Future<List<Work>> fetchWork() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  final userid = prefs.getString('user_id');
  final response =
      await http.get("https://myserver/api/work-monitor/work/?id=$userid",
    );

  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    print(response.body);
    
    
    return workFromMap(response.body);
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load Profile');
  }
}
class WorkMonitor extends StatefulWidget {
  @override
  _WorkMonitorState createState() => _WorkMonitorState();
}

class _WorkMonitorState extends State<WorkMonitor> {
  Future<Work> futureMyWorkMonitor;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Work Monitor'),
      ),
      body: Container(
        child: FutureBuilder(
          future: fetchWork(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                itemCount: snapshot.data.length,
                shrinkWrap: true,
                itemBuilder: (BuildContext context, index) {
                  Work work = snapshot.data[index];
                  //  return Text('${work.taskName}');
                  return Container(
                    padding: const EdgeInsets.all(5),
                    width: double.infinity,
                    child: Card(
                      child: Container(
                        padding: const EdgeInsets.all(20),
                        child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Subject: ',
                                        style: TextStyle(
                                          fontSize: 20,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Text(
                                      '${work.taskName}',
                                      style: TextStyle(
                                          fontSize: 20, color: Colors.black),
                                    ),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                                    Flexible(
                                        child: Text(
                                      '${work.taskDescription}',
                                    )),
                                  ]),
                              Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Assigned Date: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.assignmentDate}' ?? " ",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),

                                Row(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Description: ',
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold,
                                        )),
                              Text(
                                '${work.status}' ?? "Gone",
                                style: TextStyle(fontSize: 16),
                              ),
                                  ]),
                            
                            Text(
                              
                              '${work.assignorRemarks[index]}'
                              ),
                            ]),
                            
                      ),
                    ),
                  );
                },
              );
            } else if (snapshot.hasError) {
              return Text("${snapshot.error}");
            }

            // By default, show a loading spinner.
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}
class WorkMonitor扩展StatefulWidget{
@凌驾
_WorkMonitorState createState();
}
类_WorkMonitorState扩展状态{
未来我的工作监视器;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“工作监视器”),
),
主体:容器(
孩子:未来建设者(
future:fetchWork(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回ListView.builder(
itemCount:snapshot.data.length,
收缩膜:对,
itemBuilder:(构建上下文,索引){
工时=快照.数据[索引];
//返回文本(“${work.taskName}”);
返回容器(
填充:常量边集。全部(5),
宽度:double.infinity,
孩子:卡片(
子:容器(
填充:常数边集。全部(20),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
划船(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本('主题:',
样式:TextStyle(
尺寸:20,
fontWeight:fontWeight.bold,
)),
正文(
“${work.taskName}”,
样式:TextStyle(
字体大小:20,颜色:颜色。黑色),
),
]),
划船(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
Text('说明:',
样式:TextStyle(
尺寸:16,
fontWeight:fontWeight.bold,
)),
灵活的(
子:文本(
“${work.taskDescription}”,
)),
]),
划船(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本('指定日期:',
样式:TextStyle(
尺寸:16,
fontWeight:fontWeight.bold,
)),