来自API的颤振多个复选框

来自API的颤振多个复选框,api,flutter,checkbox,Api,Flutter,Checkbox,我已经能够在FutureBuilder小部件中显示API中的Json数据。但是,小部件对每个列表都有复选框。每当我检查一个列表时,整个列表都会被检查。 我想要一个关于如何单独检查每个列表并能够使用所选列表的数据的帮助 import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:bottom_navy_bar/bottom_navy_bar.dart'; import 'package:flutte

我已经能够在FutureBuilder小部件中显示API中的Json数据。但是,小部件对每个列表都有复选框。每当我检查一个列表时,整个列表都会被检查。 我想要一个关于如何单独检查每个列表并能够使用所选列表的数据的帮助

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:bottom_navy_bar/bottom_navy_bar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mar/Components/mydrawer.dart';
import 'package:mar/Services/auth.dart';
import 'package:mar/sccreens/readRequirements.dart';
import 'package:mar/sccreens/scanAnalysis.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../constants.dart';
import 'infoAnalysis.dart';
import 'login_screen.dart';

class Know extends StatefulWidget {
  static String id = 'Know';
  @override
  _KnowState createState() => _KnowState();
}

class _KnowState extends State<Know> {
  List sympotms = [];
  int currentIndex = 2;
  bool valuefirst = false;
  int _bottomBarIndex = 0;
  Auth _auth;

  showdialogall(context, String mytitle, String mycontent) {
    return showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(30),
            ),
            title: Text(
              mytitle,
              style: TextStyle(color: Colors.deepOrange),
            ),
            content: Text(mycontent),
            actions: [
              Center(
                child: RaisedButton(
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(15),
                    ),
                    color: kMainColor,
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => ReadReq()),
                      );
                    },
                    child: Text(
                      "Requirements",
                      style: TextStyle(color: Colors.black),
                    )),
              ),
            ],
          );
        });
  }

  Future fetchdata() async {
    var res = await http.get("http://10.0.2.2/medical/symptoms.php");
    if (res.statusCode == 200) {
      var obj = json.decode(res.body);
      return obj;
    }
  }

  bool isSearching = false;

  @override
  void initState() {
    fetchdata().then((data) {
      setState(() {
        sympotms = data;
      });
    });
    super.initState();
  }

  void _filterSymptoms(value) {
    setState(() {
      filteredsympotms = sympotms
          .where(
              (sym) => sym['name'].toLowerCase().contains(value.toLowerCase()))
          .toList();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: kMainColor,
        title: Text(
          "Know Your Analysis",
          style: TextStyle(
            fontFamily: 'Pacifico',
          ),
        ),
        actions: <Widget>[
          FlatButton(
            child: CircleAvatar(
              child: Image(
                image: AssetImage('images/icons/medical.png'),
              ),
              backgroundColor: Colors.black,
            ),
            onPressed: () {
              Navigator.pushNamed(context, Scan.id);
            },
          ),
        ],
        centerTitle: true,
      ),
      drawer: MyDrawer(),
      body: Column(
        children: [
          Expanded(
            child: sympotms.length > 0
                ? ListView.builder(
                    itemBuilder: (_, index) {
                      return Container(
                        child: Row(
                          children: [
                            SizedBox(width: 10),
                            Checkbox(
                              value: this.valuefirst,
                              onChanged: (bool value) {
                                setState(() {
                                  valuefirst = value;
                                });
                              },
                              checkColor: Colors.greenAccent,
                              activeColor: Colors.black,
                            ),
                            Text(
                              "${sympotms[index]['SymptomsName']}",
                              style: TextStyle(fontSize: 17.0),
                            ),
                          ],
                        ),
                      );
                    },
                    itemCount: sympotms.length,
                  )
                : Container(child: Center(child: Text("Loading..."))),
          ),
          RaisedButton(
            child: Text(
              " Submit ",
              style: TextStyle(fontSize: 20),
            ),
            onPressed: () {
              showdialogall(context, "Result !", "CBC Test");
            },
            // onPressed: showdialogall(context, "Result !", "CBC Test"),
            color: Colors.green,
            textColor: Colors.white,
            splashColor: Colors.grey,
            padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
          ),
        ],
      ),
      //Navigation
      bottomNavigationBar: BottomNavyBar(
        animationDuration: Duration(milliseconds: 800),
        curve: Curves.easeInOut,
        selectedIndex: currentIndex,
        onItemSelected: (index) async {
          if (index == 0) {
            Navigator.pushNamed(context, Scan.id);
          }
          if (index == 1) {
            Navigator.pushNamed(context, Information.id);
          }
          if (index == 2) {
            Navigator.pushNamed(context, Know.id);
          }
          if (index == 3) {
            SharedPreferences pref = await SharedPreferences.getInstance();
            pref.clear();
            await _auth.signOut();
            Navigator.popAndPushNamed(context, LoginScreen.id);
          }
          setState(() {
            currentIndex = index;
          });
        },
        items: <BottomNavyBarItem>[
          BottomNavyBarItem(
            icon: Icon(
              Icons.camera_alt,
            ),
            title: Text('Scan'),
            activeColor: Colors.black,
            inactiveColor: Colors.black,
          ),
          BottomNavyBarItem(
            icon: Icon(
              Icons.perm_device_information,
            ),
            title: Text('Information'),
            activeColor: Colors.black,
            inactiveColor: Colors.black,
          ),
          BottomNavyBarItem(
            icon: Icon(
              Icons.open_in_new_outlined,
            ),
            title: Text('Know analysis'),
            activeColor: Colors.black,
            inactiveColor: Colors.black,
          ),
        ],
      ),
    );
  }
}
导入'dart:convert';
将“package:http/http.dart”导入为http;
进口“包装:底部_海军蓝_条/底部_海军蓝_条.省道”;
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“package:mar/Components/mydrawer.dart”;
导入“包:mar/Services/auth.dart”;
进口“包装:mar/sccreens/readRequirements.dart”;
进口“包装:mar/sccreens/scanAnalysis.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
导入“../constants.dart”;
导入“infoAnalysis.dart”;
导入“login_screen.dart”;
类知道扩展StatefulWidget{
静态字符串id='Know';
@凌驾
_KnowState createState()=>\u KnowState();
}
类KnowState扩展了状态{
列表符号=[];
int currentIndex=2;
bool valuefirst=false;
int _bottomBarIndex=0;
认证(Auth);;
showdialogall(上下文、字符串mytitle、字符串mycontent){
返回显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
形状:圆形矩形边框(
边界半径:边界半径。圆形(30),
),
标题:正文(
我的头衔,
样式:TextStyle(颜色:Colors.deepOrange),
),
内容:文本(mycontent),
行动:[
居中(
孩子:升起按钮(
形状:圆形矩形边框(
边界半径:边界半径。圆形(15),
),
颜色:kMainColor,
已按下:(){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>ReadReq()),
);
},
子:文本(
“要求”,
样式:TextStyle(颜色:Colors.black),
)),
),
],
);
});
}
Future fetchdata()异步{
var res=wait http.get(“http://10.0.2.2/medical/symptoms.php");
如果(res.statusCode==200){
var obj=json.decode(res.body);
返回obj;
}
}
布尔isSearching=假;
@凌驾
void initState(){
fetchdata()。然后((数据){
设置状态(){
sympotms=数据;
});
});
super.initState();
}
无效过滤器符号(值){
设置状态(){
filteredsympotms=符号
.在哪里(
(sym)=>sym['name'].toLowerCase().contains(value.toLowerCase())
.toList();
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
背景颜色:kMainColor,
标题:正文(
“了解你的分析”,
样式:TextStyle(
fontFamily:“Pacifico”,
),
),
行动:[
扁平按钮(
孩子:圆环星(
孩子:图像(
image:AssetImage('images/icons/medical.png'),
),
背景颜色:Colors.black,
),
已按下:(){
Navigator.pushNamed(context,Scan.id);
},
),
],
标题:对,
),
抽屉:MyDrawer(),
正文:专栏(
儿童:[
扩大(
子项:符号长度>0
?ListView.builder(
itemBuilder:(\ux,索引){
返回容器(
孩子:排(
儿童:[
尺寸箱(宽度:10),
复选框(
value:this.valuefirst,
一旦更改:(布尔值){
设置状态(){
valuefirst=值;
});
},
checkColor:Colors.greenAccent,
activeColor:Colors.black,
),
正文(
“${sympotms[index]['symplsName']}”,
样式:TextStyle(字体大小:17.0),
),
],
),
);
},
itemCount:sympotms.length,
)
:容器(子项:中心(子项:文本(“加载…”)),
),
升起的按钮(
子:文本(
“提交”,
样式:TextStyle(字体大小:20),
),
已按下:(){
showdialogall(上下文,“结果!”,“CBC测试”);
},
//onPressed:showdialogall(上下文,“结果!”,“CBC测试”),
颜色:颜色。绿色,
textColor:Colors.white,
颜色:颜色。灰色,
填充:从LTRB(10,10,10,10)开始的边缘设置,
),
],
),
//航行
底部导航栏:底部导航栏(
animationDuration:持续时间(毫秒:800),
曲线:Curves.easeInOut,
selectedIndex:currentIndex,
onItemSelected:(索引)异步{
如果(索引==0){
Navigator.pushNamed(context,Scan.id);
}
如果(索引==1){
Navigator.pushNamed(context,Information.id);
}
如果(索引==2){
Navigator.pushNamed(上下文,Know.id);
}
如果(索引==3){
SharedReferences pref=等待SharedReferences.getInstance();
pref.clear();
A.
final selectedIndexes = [];

/// In List View

ListView.builder(
                    itemBuilder: (_, index) {
                      return Container(
                        child: Row(
                          children: [
                            SizedBox(width: 10),
                            Checkbox(
                              value: selectedIndexes.contains(index),
                              onChanged: (bool value) {
                                if(selectedIndexes.contains(index) {
                                   selectedIndexes.remove(index); // unselect 
                                } else {
                                  selectedIndexes.add(index);  // select  
                                }
                                setState(() {});
                              },
                              checkColor: Colors.greenAccent,
                              activeColor: Colors.black,
                            ),
                            Text(
                              "${sympotms[index]['SymptomsName']}",
                              style: TextStyle(fontSize: 17.0),
                            ),
                          ],
                        ),
                      );
                    },
                    itemCount: sympotms.length,
                  )