Unten habe ich eine Vereinfachung eines Codes eingefügt, den ich geschrieben habe. Ich habe einen Teil der Funktion tool() entfernt, da sie für den Zweck dieser Frage nicht wichtig ist.
Ich möchte, dass die List OutputRow als untergeordnete Elemente von Wrap() im FutureBuilder angezeigt wird.
Derzeit gibt es mir diesen Fehler: Typ 'List' ist kein Untertyp des Typs 'List'.
Weiß jemand wie ich das beheben kann?
import 'package:flutter/material.dart';
import 'package:language_tool/language_tool.dart';
void main() => runApp(mainApp());
class mainApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Chat(),
);
}
}
class Chat extends StatefulWidget {
const Chat({Key? key}): super(key: key);
@override
_ChatState createState() => _ChatState();
}
class _ChatState extends State<Chat> {
String text = 'Henlo. I am Gabriele. I am 21 yers old!';
Future<List> tool(String text) async {
var tool = LanguageTool();
var result = tool.check(text);
var correction = await result;
// code simplification {...}
List OutputList = [
'',
'Henlo',
'. I am Gabriele. I am 21 ',
'yers',
' old!'
];
List OutputBool = [false, true, false, true, false];
List OutputIndex = [0, 1, 2, 3, 4];
List OutputRow = [];
for (int i in OutputIndex) {
if (OutputBool[i] == false) {
OutputRow.add(
Container(
child: Text(
OutputList[i],
style: TextStyle(fontSize: 18.0),
),
),
);
} else if (OutputBool[i] == true) {
OutputRow.add(
Container(
child: GestureDetector(
onTap: () {},
child: Container(
color: Colors.orange,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
OutputList[i],
style: TextStyle(fontSize: 18.0),
),
),
),
),
),
);
}
}
print(OutputRow);
return OutputRow;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: FutureBuilder(
future: tool(text),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
return Center(
child: Text('Loading...'),
);
} else {
return Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
runSpacing: 4.0,
children: snapshot.data,
);
}
}),
),
);
}
}
Ich hoffe, es ist klar.
Vielen Dank:)
Lösung des Problems
Das Problem, mit dem Sie konfrontiert sind, besteht darin, dass Ihre Funktion tool
eine Future<List>
. Wenn das List
generische ( List<>
) nicht definiert ist, wird es als interpretiert dynamic
.
return Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
runSpacing: 4.0,
children: snapshot.data,
);
Hier children
erwartet Sie eine Liste von Widgets oder mit anderen Worten - List<Widget>
.
Um das Problem zu beheben, ändern Sie zuerst den Rückgabetyp Ihrer tool
Funktion in:
Future<List<Widget>> tool(String text) async {
Dann die Erklärung des OutputRow
an:
List<Widget> OutputRow = [];
Abschließend: Wenn bei der Bereitstellung ein bestimmter Listentyp erwartet wird, sollten Sie das Generikum der Liste so deklarieren, dass es mit dem angeforderten übereinstimmt.
Keine Kommentare:
Kommentar veröffentlichen