Flutter 如何根据 JSON API 的状态更改颜色

Jun*_*ior 1 json dart flutter flutter-layout

我想根据 JSON API 中的状态动态更改框颜色。例如,已批准 = Colors.green、已拒绝 = Colors.red、已提交 = Colors.blue。

这是我当前应用程序的图像, 我在状态下划线了

如何才能实现呢?

这就是我获取 API 的方式:

Future getCalendar() async{
  List<Events> list;

    String api = "http://200.0.0.104/api/dynamic/uspGetCalendarEvents_mobile?EmployeeId=5";
    var res = await http.get(Uri.encodeFull(api), headers: {"Accept": "application/json"});

        var data = json.decode(res.body);
        var rest = data["data"] as List;
        list = rest.map<Events>((json) => Events.fromJson(json)).toList();

    return list;
  }
Run Code Online (Sandbox Code Playgroud)

这就是我循环数据的方式:

getCalendar().then((data){

          for (var a =0; a <  data.length; a++ )
          {
             _events.addAll({DateTime.parse(data[a].start.toString().replaceAll("-", "")) :  data[a].title.toString().split(",")  });
          }
    });
Run Code Online (Sandbox Code Playgroud)

这是我的小部件:

 Widget _buildEventList() {
    return ListView(
      children: _selectedEvents
          .map((event) => Container(
                decoration: BoxDecoration(
                  color: Colors.blue, // i want to change the color
                  border: Border.all(width: 0.8),
                  borderRadius: BorderRadius.circular(12.0),
                ),
                margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
                child: ListTile(
                  title: Text(event.toString()),
                  onTap: () => print('$event tapped!'),
                ),
              ))
          .toList(),
    );
  }
Run Code Online (Sandbox Code Playgroud)

die*_*per 5

您可以创建一个方法来根据条件返回 Color(假设 event.toString() = Rejected, Approvedor Submitted):


Color _getColorByEvent(String event) {
  if (event == "Approved") return Colors.green;
  if (event == "Rejected") return Colors.red;
  return Colors.blue;
}

...

BoxDecoration(
                color: _getColorByEvent(event.toString()), // i want to change the color
                border: Border.all(width: 0.8),
                borderRadius: BorderRadius.circular(12.0),
              ),
Run Code Online (Sandbox Code Playgroud)