flutter - 如何在“ListViewBulider”中显示快照,以便快照中的数据是一个列表
问题描述
我想从 Snapchat 获取数据,这些数据保存在我的本地设备上,并使其看起来像这样:
我设法得到了如图所示的效果,但这些不是快照,而是类中显示的值,我希望快照看起来相同,但我有一个很大的问题。
代码:
import 'dart:js';
import "package:shared_preferences/shared_preferences.dart";
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:async/async.dart';
import 'package:flutter_application_1/text.dart';
void main() {
runApp(
MyApp(),
);
}
class MyApp extends StatefulWidget {
MyApp({ Key? key }) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home:Scaffold(
appBar: AppBar( title:Text("TodoList")),
body:Container(
child: Column(children: [
Expanded(child:alertDialog()),
//Center(child:FloatingActionButton(child:const Icon(Icons.add),onPressed: (){},))
],)
)
)
);
}
}
class alertDialog extends StatefulWidget {
const alertDialog({ Key? key }) : super(key: key);
@override
_alertDialogState createState() => _alertDialogState();
}
class _alertDialogState extends State<alertDialog> {
final TextFromInput=TextEditingController();
bool isChecked = false;
List<_strikeThrough> items= <_strikeThrough> [
_strikeThrough(todoToggle: false,todoText: "",),
//_strikeThrough(todoToggle: false,todoText: "czytac barona")
];
late int index=1;
@override
Widget build(BuildContext context) {
int i=0;
return Scaffold(
body:Container(
child:Column(children: [
Expanded(child:FutureBuilder(
future:MemoryItem,
builder:(context, snapshot)
{
if(snapshot.hasData){
print("snapszot : ${snapshot.data}");
return Column(children: [Center(child:Text("Funckja Asynchroniczna odebrala Dane"),
),
Expanded(child:
ListView.builder(itemCount:items.length,itemBuilder:(BuildContext context,int index)
{
return Card(
child:Container(
padding: EdgeInsets.all(10.0),
child:Column(children: <Widget>[
CheckboxListTile(title:_strikeThrough(todoText:items[index].todoText,todoToggle: items[index].todoToggle,),value: items[index].todoToggle,// rezutl what i want but this not storage to localData
//CheckboxListTile(title:_strikeThrough(todoText: "${snapshot.data[index]}",todoToggle: items[index].todoToggle,),value: items[index].todoToggle, //<---MY PROBLEM
onChanged: (bool? value){
setState(() {
items[index].todoToggle = value!;
});
},dense: true,
activeColor:Colors.green
),
],)
)
);
}
),)
]);
}else{
return Center(child:Text("no Data"));
}}
)
),
Center(child:FloatingActionButton(child:const Icon(Icons.add),onPressed: (){DisplayAlert(context,index);},)),
],)
)
);
}
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
late Future<String> MemoryItem;
Future<void>_incrementCounter( int index) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final String RememberItems = (prefs.getString("counter")??"")+" " + " " + items[index].todoText;
setState((){
MemoryItem=prefs.setString("counter",RememberItems).then((bool success) {
return RememberItems;
});
});
}
void initState(){
super.initState();
MemoryItem=_prefs.then((SharedPreferences prefs)
{
return (prefs.getString("counter")??"You dont Have Tasks Yet");
}
);
}
void DisplayAlert(BuildContext context,int index){
Widget ContentDialog=AlertDialog
(
title:Text("Add Task"),
content:TextField(controller:TextFromInput ,),
actions:
[
TextButton(onPressed:()
{
Navigator.pop(context);
TextFromInput.clear();
},
child:const Text("Cancel")
),
TextButton(onPressed:()
{
setState((){
items.add(new _strikeThrough(todoText: TextFromInput.text,todoToggle: false,));
int w= index++;
_incrementCounter(w);
});
},
child:const Text("Add")
)
],
);
showDialog(context:context,
builder:(BuildContext context){
return ContentDialog;
});
}
}
class _strikeThrough extends StatelessWidget{
bool todoToggle;
String todoText;
_strikeThrough({ required this.todoToggle, required this.todoText});
Widget _strikewidget(){
if(todoToggle==false){
// print("Wdwdw");
return Text(
todoText,
style: TextStyle(
fontSize: 20.0
),
);
}
else{
return Text(
todoText,
style: TextStyle(
fontSize: 22.0,
decoration: TextDecoration.lineThrough,
color: Colors.redAccent,
fontStyle: FontStyle.italic
),
);
}
}
@override
Widget build(BuildContext context) {
return _strikewidget();
}
}
解决方案
推荐阅读
- drupal - 在 drupal 8 安装上呈现实体字段标记
- dns - 为什么 `getaddrinfo` 不支持别名?
- python - 在 Python 中更新 CSV 文件
- javascript - 哪种方式最适合 React Native 中的条件渲染?
- python - 尝试在 Windows10 上使用 Python 创建 Virtualenv 时出现 AssertionError
- c++ - C++ 对泛型类成员的未定义引用
- algorithm - 计算给定代码的时间复杂度的问题
- android - Searchview 过滤器不适用于包含已解析 JSON 的列表,但适用于非 JSON 列表
- php - PDO:使用子字符串作为标准来获取行数
- python - 在 EMR 中运行 Jupyter notebook 时没有名为“pyspark”的模块