当我调试这个它显示在搜索栏上的错误,当我试图在模拟器上的文本这里是代码,请解决这个谢谢
延迟初始化错误:字段“name”尚未初始化。
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String url = "https://owlbot.info/api/v4/dictionary/";
String token = "7ba05536bd11ff8e22800cbda80951376c59ed84";
TextEditingController textEditingController = TextEditingController();
late StreamController _streamController;
late Stream _stream;
late Timer _debounce;
searchText() async {
if (textEditingController.text == null ||
textEditingController.text.isEmpty) {
_streamController.add(null);
return;
}
_streamController.add("waiting");
Uri uri = Uri.parse(url+textEditingController.text.trim());
http.Response response = await http.get (uri, headers: {"Authorization": "Token " + token});
_streamController.add(json.decode(response.body));
}
@override
void initState() {
super.initState();
_streamController = StreamController();
_stream=_streamController.stream;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
title: Text(
"Dictionery",
style: TextStyle(color: Colors.white),
),
centerTitle: true,
bottom: PreferredSize(
preferredSize: Size.fromHeight(45),
child: Row(
children: [
Expanded(
child: Container(
margin: const EdgeInsets.only(left: 12, bottom: 11),
decoration:
BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(24),
),
child: TextFormField(
onChanged: (String text) {
if (_debounce.isActive) _debounce.cancel();
_debounce = Timer(const Duration(milliseconds: 1000), () {
searchText();
},
);
},
controller: textEditingController,
decoration: InputDecoration(
hintText: "Search for Word",
contentPadding: const EdgeInsets.only(left: 24),
border: InputBorder.none,
),
),
),
),
IconButton(
icon:Icon(
Icons.search,
color: Colors.white,
),
onPressed: (){
searchText();
},
),
],
),
),
),
body: Container(
margin: EdgeInsets.all(8.0),
child: StreamBuilder(
builder:(BuildContext context, AsyncSnapshot snapshot){
if(snapshot.data== null)
{
return Center(
child: Text('Enter A Search Word'),
);
}
if(snapshot.data == "waiting"){
return Center(
child: CircularProgressIndicator(),
);
}
return ListView.builder(
itemCount: snapshot.data["defination"].length,
itemBuilder: (BuildContext context , int index)
{
return ListBody(
children: [
Container(
color: Colors.grey[300],
child: ListTile(
leading:snapshot.data["definations"][index]["image_url"] == null
? null:
CircleAvatar(
backgroundImage: NetworkImage(snapshot.data["definations"][index]["image_url"]),
),
title: Text(textEditingController.text.trim()
+"(" + snapshot.data["definations"][index]["type"]+")"),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
snapshot.data["defination"][index]["defination"]),
)
],
);
},
);
},
stream: _stream,
),
),
);
}
}
当我调试这个,并触摸屏幕上的文本,它给予我错误延迟初始化
1条答案
按热度按时间bihw5rsg1#
当前问题是
_debounce
尚未初始化。请将late
改为可为空的Timer? _debounce;
。而变化将是
完整片段