gpt4 book ai didi

flutter - 如何在 flutter 中使用 listview 和 riverpod

转载 作者:行者123 更新时间:2023-12-05 05:35:43 25 4
gpt4 key购买 nike

我正在开发一个带有 flutter 和 flutter_riverpod 的应用程序。我想将 listview 与 riverpod 一起使用。但是不知道怎么用。我有一个文本字段的 onSubmitted 方法。此方法为 texffield 文本工作一些 Dart 代码。我的目的是将单词保存到 ListView 中。我正在为此目的使用 flutter_riverpod,但我不知道如何将列表用于 stateprovider 或任何其他提供程序。

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter/material.dart';


void main() {
runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: SafeArea(
child: SingleChildScrollView(child: ana1()),
),
),
);
}
}

final List<String> myList= [];
final StateProvider<int> _lengthProvider = StateProvider((ref) => 0);

class ana1 extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return Container(
width: 1000,
height: 1000,
color: Colors.yellow,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 500,
child: TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Content Text',
),
onSubmitted: (inText) {
print(inText);

String gir = inText;
String myText = "$gir a";
var a = 0;

List<String> myList = [];

for (a = 0; a < myText.length; a++) {
if (myText.substring(a, a + 1) == " ") {
myList.add(myText.substring(0, a));
myText = myText.substring(a + 1, myText.length);
a = 0;
}
}

var b = 0;
String errorText = "?.; :-";

for (b = 0; b < myList.length; b++) {
String checkF = myList[b].substring(0, 1);
if (errorText.contains(checkF)) {
myList[b] =
myList[b].substring(1, myList[b].length);
}

String checkL = myList[b].substring(
myList[b].length - 1, myList[b].length);
if (errorText.contains(checkL)) {
myList[b] = myList[b]
.substring(0, myList[b].length - 1);
}
}



myList.add("$inText-${myList.length + 1}");
ref.read(_lengthProvider.state).state = myList.length;




},
)),
Container(
color: Colors.amberAccent,
width: 500,
child: ListView.builder(
itemCount: ref.watch(_lengthProvider.state).state,
itemBuilder: (BuildContext context, int index) {
return Text(myList[index]);
},
),
),
],
));
}
}

最佳答案

我正在简化代码片段以仅与状态提供者一起工作


final StateProvider<List<String>> itemsProvider = StateProvider((ref) => []);

class ana1 extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return Container(
width: 400,
height: 300,
color: Colors.yellow,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Content Text',
),
onSubmitted: (inText) {
final sliptIntoWords = inText.split(
","); // Im separating words on , perform your logic here
final oldItems = ref.read(itemsProvider);
ref.read(itemsProvider.state).update(
(state) => [
...oldItems,
...sliptIntoWords,
],
);
},
)),
Expanded(
child: Container(
color: Colors.amberAccent,
child: ListView.builder(
itemCount: ref.watch(itemsProvider).length,
itemBuilder: (BuildContext context, int index) {
return Text(ref.watch(itemsProvider)[index]);
},
),
),
),
],
));
}
}

我认为在 ListView 上使用 cosumer 会更好

关于flutter - 如何在 flutter 中使用 listview 和 riverpod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73433971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com