如何从flutter中的json动态设置文本值

时间:2018-06-27 11:16:48

标签: dart flutter flutter-layout

嗨,朋友们如何动态设置文本值我正在使用JSON来获取数据,但是当我刷新数据时,正在调用initstate的JSON以每次加载之前应用程序页面开始对不起我不太了解颤动,因此请帮我解决一下,请找到下面的代码

var uri = 'https://mozilla.org/?x=шеллы';
var encoded = encodeURI(uri);
console.log(encoded);
// expected output: "https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"

try {
  console.log(decodeURI(encoded));
  // expected output: "https://mozilla.org/?x=шеллы"
} catch(e) { // catches a malformed URI
  console.error(e);
}

1 个答案:

答案 0 :(得分:1)

您可以使用StatefulWidgetsetState完成此操作,以随时更改布局。由于您的代码中已包含小部件,因此在设置变量时只需调用setState。 profilejson()也应该在该州内:

...
profilejson() async {
    SharedPreferences pref = await SharedPreferences.getInstance();
    var profile_url = url + "view_profile&userid=" + pref.getString('userid');
    print(profile_url);
    http.Response profileresponse = await http.get(profile_url);
    var profile_response_json = json.decode(profileresponse.body);

    // the variables you want the layout to be updated with
    setState(() {
        name = profile_response_json['username'];
        userimage = profile_response_json['image'];
        birth = profile_response_json['dob'];
        c_id = profile_response_json['customerid'];
        email = profile_response_json['email'];
        mobile_number = profile_response_json['phone'];
    })
}   

@override
void initState() {
    super.initState();
    profilejson();
}
...

完整代码:

String name, userimage, birth, c_id, email, mobile_number;

class Profile extends StatefulWidget {
@override
State<StatefulWidget> createState() {
    Profile_Customer profile_customer() => Profile_Customer();
    return profile_customer();
}
}

class Profile_Customer extends State<Profile> {
@override
Widget build(BuildContext context) {
    return new MaterialApp(
    home: new Scaffold(
        appBar: new AppBar(
        title: new Text('Profile'),
        backgroundColor: primarycolor,
        leading: new IconButton(
            icon: new Icon(Icons.arrow_back),
            onPressed: () {
                Navigator.pushReplacement(
                    context,
                    new MaterialPageRoute(
                        builder: (context) => new HomeScreen()));
            }),
        ),
        body: email != null ? new Builder(builder: (BuildContext context) {
        return new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
            new Container(
                child: new Image.asset('assets/rural_post_logo.png',
                    fit: BoxFit.cover),
                margin: EdgeInsets.only(bottom: 15.0),
            ),
            new Container(
                child: new CircleAvatar(
                child: new Image.network(userimage,
                    width: 100.0, height: 100.0, fit: BoxFit.cover),
                ),
                margin: EdgeInsets.only(top: 10.0),
                alignment: Alignment(0.0, 0.0),
            ),
            new Container(
                child: new Text(name),
                margin: EdgeInsets.only(top: 10.0),
            ),
            new Container(
                child: new Divider(
                height: 2.0,
                color: primarycolor,
                ),
                margin: EdgeInsets.only(right: 10.0, left: 10.0, top: 10.0),
            ),
            new Container(
                child: new Text(
                'Birth Date',
                style: new TextStyle(
                    fontWeight: FontWeight.bold, fontSize: 16.0),
                ),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Text(birth),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Divider(
                height: 2.0,
                color: primarycolor,
                ),
                margin: EdgeInsets.only(right: 10.0, left: 10.0, top: 10.0),
            ),
            new Container(
                child: new Text(
                'Customer ID',
                style: new TextStyle(
                    fontWeight: FontWeight.bold, fontSize: 16.0),
                ),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Text(c_id),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Divider(
                height: 2.0,
                color: primarycolor,
                ),
                margin: EdgeInsets.only(right: 10.0, left: 10.0, top: 10.0),
            ),
            new Container(
                child: new Text(
                'Email',
                style: new TextStyle(
                    fontWeight: FontWeight.bold, fontSize: 16.0),
                ),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Text(email),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Divider(
                height: 2.0,
                color: primarycolor,
                ),
                margin: EdgeInsets.only(right: 10.0, left: 10.0, top: 10.0),
            ),
            new Container(
                child: new Text(
                'Mobile number',
                style: new TextStyle(
                    fontWeight: FontWeight.bold, fontSize: 16.0),
                ),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new Text(mobile_number),
                alignment: Alignment(-1.0, 0.0),
                margin: EdgeInsets.only(top: 10.0, left: 10.0),
            ),
            new Container(
                child: new RaisedButton(
                onPressed: () {
                    Navigator.push(
                        context,
                        new MaterialPageRoute(
                            builder: (context) => new HomeScreen()));
                },
                color: secondarycolor,
                shape: new RoundedRectangleBorder(
                    borderRadius: new BorderRadius.circular(5.0)),
                child: new Text('Update Profile',
                    style: new TextStyle(color: Colors.white)),
                ),
                width: 300.0,
                height: 40.0,
                margin: EdgeInsets.only(top: 10.0),
            )
            ],
        );
        }) : new Center(child: new CircularProgressIndicator()),
    ),
    );
}

    profilejson() async {
        SharedPreferences pref = await SharedPreferences.getInstance();
        var profile_url = url + "view_profile&userid=" + pref.getString('userid');
        print(profile_url);
        http.Response profileresponse = await http.get(profile_url);
        var profile_response_json = json.decode(profileresponse.body);

        // the variables you want the layout to be updated with
        setState(() {
            name = profile_response_json['username'];
            userimage = profile_response_json['image'];
            birth = profile_response_json['dob'];
            c_id = profile_response_json['customerid'];
            email = profile_response_json['email'];
            mobile_number = profile_response_json['phone'];
        })
    }   

    @override
    void initState() {
        super.initState();
        profilejson();
    }
}