Erro de codigo no VS code criando formulário e redirecionamento
Por gentileza, preciso de ajuda! estou iniciando aqui na comunidade e recente no flutter. Tenho uma missão de utilizar o json e controller dos inputs. Preciso pelo botão (ADD) sair da Primeira tela redirecionar para a Segunda tela, salvar ao colocar os inputs e retornar para a primeira mostrando (nome e valor). O formulário da Segunda Tela terá campos: nome, telefone, data e valor. Quero manter a função dismissible para termos o efeito de arrastar o item da lista. Segue o que estou fazendo mais com erros.
Não sei como proceder e apanhando a vários dias!
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
void main(){
runApp(MaterialApp(
home: Home(),
));
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final _toDoController = TextEditingController();
List _toDoList = [SegundaRota];
Map<String, dynamic> _lastRemoved;
int _lastRemovedPos;
@override
void initState() {
super.initState();
_readData().then((data) {
setState(() {
_toDoList = json.decode(data);
});
});
}
void _addToDo() {
setState(() {
Map<String, dynamic> newToDo = Map();
newToDo["title"] = _toDoController.text;
_toDoController.text = "";
newToDo["ok"] = false;
_toDoList.add(newToDo);
_saveData();
});
}
Future<Null> _refresh() async{
await Future.delayed(Duration(seconds: 1));
setState(() {
_toDoList.sort((a, b){
if(a["ok"] && !b["ok"]) return 1;
else if(!a["ok"] && b["ok"]) return -1;
else return 0;
});
_saveData();
});
return null;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Lista de Tarefas"),
backgroundColor: Colors.blueAccent,
centerTitle: true,
),
body: Column(
children: <Widget>[
Container(
padding: EdgeInsets.fromLTRB(17.0, 1.0, 7.0, 1.0),
child: Row(
children: <Widget>[
RaisedButton(
color: Colors.blueAccent,
child: Text("ADD"),
textColor: Colors.white,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SegundaRota()),
);
},
)
],
),
),
Expanded(
child: RefreshIndicator(onRefresh: _refresh,
child: ListView.builder(
padding: EdgeInsets.only(top: 10.0),
itemCount: _toDoList.length,
itemBuilder: buildItem),),
)
],
),
);
}
Widget buildItem(BuildContext context, int index){
return Dismissible(
key: Key(DateTime.now().millisecondsSinceEpoch.toString()),
background: Container(
color: Colors.red,
child: Align(
alignment: Alignment(-0.9, 0.0),
child: Icon(Icons.delete, color: Colors.white,),
),
),
direction: DismissDirection.startToEnd,
child: CheckboxListTile(
title: Text(_toDoList[index]["title"]),
value: _toDoList[index]["ok"],
secondary: CircleAvatar(
child: Icon(_toDoList[index]["ok"] ?
Icons.check : Icons.error),),
onChanged: (c){
setState(() {
_toDoList[index]["ok"] = c;
_saveData();
});
},
),
onDismissed: (direction){
setState(() {
_lastRemoved = Map.from(_toDoList[index]);
_lastRemovedPos = index;
_toDoList.removeAt(index);
_saveData();
final snack = SnackBar(
content: Text("Tarefa \"${_lastRemoved["title"]}\" removida!"),
action: SnackBarAction(label: "Desfazer",
onPressed: () {
setState(() {
_toDoList.insert(_lastRemovedPos, _lastRemoved);
_saveData();
});
}),
duration: Duration(seconds: 2),
);
Scaffold.of(context).removeCurrentSnackBar();
Scaffold.of(context).showSnackBar(snack);
});
},
);
}
Future<File> _getFile() async {
final directory = await getApplicationDocumentsDirectory();
return File("${directory.path}/data.json");
}
Future<File> _saveData() async {
String data = json.encode(_toDoList);
final file = await _getFile();
return file.writeAsString(data);
}
Future<String> _readData() async {
try {
final file = await _getFile();
return file.readAsString();
} catch (e) {
return null;
}
}
}
class SegundaRota extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Segunda Rota (tela)"),
),
body: Column(
children: <Widget>[
Container(
padding: EdgeInsets.fromLTRB(17.0, 1.0, 7.0, 1.0),
child: Row(
children: <Widget>[
Expanded(
child: TextField(
controller: _toDoController,
decoration: InputDecoration(
labelText: "Nova Tarefa",
labelStyle: TextStyle(color: Colors.blueAccent)
),
)
),
RaisedButton(
color: Colors.blueAccent,
child: Text("ADD"),
textColor: Colors.white,
onPressed: _addToDo,
)
],
),
),
Expanded(
child: RefreshIndicator(onRefresh: _refresh,
child: ListView.builder(
padding: EdgeInsets.only(top: 10.0),
itemCount: _toDoList.length,
itemBuilder: buildItem),),
)
],
),
body: Center( child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Retornar !'),
),
),
);
}
}

Discussão (0)
Carregando comentários...