首页 > 解决方案 > 如何在“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();
  }
}

标签: flutter

解决方案


推荐阅读