错误:需要“Uri”类型的值,但得到“String”类型的值

AMM*_*AMM -1 dart flutter

我试图通过按下flutter应用程序上的按钮从我的机器中托管的闪存服务器获取一个字符串,因此每次按下按钮时文本都会更改为烧瓶字符串。烧瓶服务器: 文本

颤动应用程序:

文本

当我按下按钮时,我希望得到新的字符串,但得到问题标题的错误,我知道这是一个“类型”错误,但不确定我在哪里给出“字符串”值,那么如何修复我的代码呢?任何帮助表示赞赏!

完整错误(如果有帮助):https ://textuploader.com/tdhk0

这是我的颤振代码(request.dart 和 main.dar):

//request dart-------------------------

import 'package:http/http.dart';

Future getData(url) async {
  Response response = await get(url);
  return response.body;
}
//main.dart-------------------------------

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:passg/request.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
                title: Text('Change Text Dynamically on Button Click')
            ),
            body: Center(
                child: UpdateText()
            )
        )
    );
  }
}

class UpdateText extends StatefulWidget {

  UpdateTextState createState() => UpdateTextState();

}

class UpdateTextState extends State {

  String textHolder = 'Old Sample Text...!!!';

  changeText() async {
    var data = await getData('http://10.0.2.2:5000/passg');
    var decodedData = jsonDecode(data);
    setState(() {
      textHolder = decodedData;
    });

  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(child: Column(
            children: <Widget>[
              Container(
                  padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
                  child: Text('$textHolder',
                      style: TextStyle(fontSize: 21))),

              ElevatedButton(
                onPressed: () => changeText(),
                child: Text('Click Here To Change Text Widget Text Dynamically'),
              ),

            ]))
    );
  }
}```

Run Code Online (Sandbox Code Playgroud)

jul*_*101 5

问题的根源在于参数类型缺失。通过这样做,参数将dynamic使得 Dart 分析器无法在运行应用程序之前识别潜在的类型问题。因此,当涉及到方法和类字段的签名时,您应该始终明确指定类型。

问题是这个方法:

Future getData(url) async {
  Response response = await get(url);
  return response.body;
}
Run Code Online (Sandbox Code Playgroud)

如果你想这样做,参数url应该是类型。Uri或者,您可以制作它String,但您需要将其解析StringUri如下所示:

Future getData(String url) async {
  Response response = await get(Uri.parse(url));
  return response.body;
}
Run Code Online (Sandbox Code Playgroud)

get()您可以从包中阅读该方法的文档http,以查看它是否需要Uri: https: //pub.dev/documentation/http/latest/http/Client/get.html


ese*_*tis 5

尝试以这种方式创建您的网址:

var data = await getData(Uri.parse('http://10.0.2.2:5000/passg'));
Run Code Online (Sandbox Code Playgroud)