之前的代码是dart 1.0的, 有些写法已经失效了, 升级为dart 2.0之后的代码如下:
import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => new _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { var _ipAddress = 'Unknown'; _getIPAddress() async { var url = 'https://httpbin.org/ip'; var httpClient = new HttpClient(); String result; try { var request = await httpClient.getUrl(Uri.parse(url)); var response = await request.close(); if (response.statusCode == HttpStatus.ok) { var json = await response.transform(utf8.decoder).join(); var data = jsonDecode(json); result = data['origin']; } else { result = 'Error getting IP address:\nHttp status ${response.statusCode}'; } } catch (exception) { result = 'Failed getting IP address'; } // If the widget was removed from the tree while the message was in flight, // we want to discard the reply rather than calling setState to update our // non-existent appearance. if (!mounted) return; setState(() { _ipAddress = result; }); } @override Widget build(BuildContext context) { var spacer = new SizedBox(height: 32.0); return new Scaffold( body: new Center( child: new Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ new Text('Your current IP address is:'), new Text('$_ipAddress.'), spacer, new RaisedButton( onPressed: _getIPAddress, child: new Text('Get IP address'), ), ], ), ), ); } }
其中,
JSON.decode()的写法已经改为jsonDecode()
HttpStatus.OK的ok改为小写
UTF8.decoder的utf8改为小写
这样才能编译通过。