Сборка виджета - сборка виджета
Здравствуйте, я пытаюсь создать программу, которая, когда я нажимаю на Контейнер, меняет состояние bool файла json (с true на false или с false на true), но я не могу, потому что дайте мне следующую ошибку, кто-то знает, что я делаю не так. Спасибо за помощь!
ОШИБКА:
сообщение компилятора:
lib/main.dart:95:7: Ошибка: в неабстрактном классе Program отсутствуют реализации для этих членов:
- State.build
Попробуйте либо
- предоставить реализацию,
- унаследовать реализацию от суперкласс или миксин,
- отметьте класс как абстрактный или - предоставьте реализацию noSuchMethod.
class Program extends State {^^^^^^^../../Documents/flutter/packages/flutter/lib/src/widgets/framework.dart:1413:10: Контекст: 'State.build' определяется здесь. Сборка виджета (контекст BuildContext); ^^^^^ Приложение было перезапущено через 2 323 мс.
class Portao extends StatefulWidget {
@override
Program createState() => Program();
}
/*--------------------------------------------------*/
class Program extends State<Portao> {
List _toDoList = [];
@override
void initState() {
super.initState();
_readData().then((data) {
setState(() {
_toDoList = json.decode(data);
});
});
}
void _addToDo() {
setState(() {
Map<String, dynamic> newToDo = Map();
newToDo['ok'] = true;
_toDoList.add(newToDo);
_saveData();
});
}
Future<Null> _refresh() async{
await Future.delayed(Duration(seconds: 1));
return null;
}
@override
Widget buildItem(BuildContext context, int index) {
return Scaffold(
bottomNavigationBar: CurvedNavigationBar(
index: 0,
height: 75,
items: <Widget>[
Icon(Icons.home, size: 30, color: Colors.black), //0
Icon(Icons.camera_alt, size: 30, color: Colors.black), //1
Icon(Icons.build, size: 30, color: Colors.black), //2
Icon(Icons.person, size: 30, color: Colors.black), //3
],
color: Colors.white.withOpacity(0.90),
buttonBackgroundColor: Colors.white.withOpacity(0.90),
backgroundColor: selected ? Colors.green.withOpacity(0.90) : Colors.deepOrangeAccent.withOpacity(0.90),
animationCurve: Curves.easeInOut,
animationDuration: Duration(
milliseconds: 550
),
onTap: (index) {
if (index==1)
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: Camera()
)
);
else if (index==2)
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child:Definicoes()),
);
else if (index==3)
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child:infor()),
);
},
),
body: Container(
color: _toDoList[index]['ok'] ? Colors.green.withOpacity(0.90) : Colors.deepOrangeAccent.withOpacity(0.90),
child:Column(
children: <Widget>[
Expanded(
flex: 5,
child: Align(
child: AnimatedContainer(
alignment: _toDoList[index]['ok'] ? Alignment(0, 0.3) : Alignment(0, 0.3),
duration: Duration(
milliseconds: 600),
child: AnimatedContainer(
width: _toDoList[index]['ok'] ? 150 : 135,
height: _toDoList[index]['ok'] ? 150 : 135,
color: Colors.transparent,
duration: Duration(
milliseconds: 1250),
curve: Curves.bounceOut,
child: GestureDetector(
onTap: () {
onChanged: (c){
setState(() {
_toDoList[index]['ok'] = c;
_saveData();
});
};
},
child: Container(
decoration: BoxDecoration(
color: _toDoList[index]['ok'] ? Colors.green.withOpacity(0.90) : Colors.red.withOpacity(0.90),
borderRadius: _toDoList[index]['ok'] ? BorderRadius.circular(30) : BorderRadius.circular(40),
boxShadow: [
BoxShadow(
color: Colors.white.withOpacity(0.40),
spreadRadius: _toDoList[index]['ok'] ? 10 : 4,
blurRadius: 50,
offset: Offset(0, 0),
),
],
),
child: Center(
child: Container(
height: 250,
width: 250,
color: Colors.transparent,
child: _toDoList[index]['ok'] ? FlareActor(
"animacoes/open.flr", animation: 'open',
): FlareActor(
"animacoes/close.flr", animation: 'close',
),
),
),
),
),
),
),
),
),
Expanded(
flex: 5,
child:Row(
children: <Widget>[
Expanded(
flex: 10,
child:Align(
alignment:Alignment(0, -0.3),
child: Container(
width: 250,
height: 250,
child: (
_toDoList[index]['ok'] ? Text(
'Portão Fechado',
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 30,
color: Colors.black,
),
textAlign: TextAlign.center,
) : Text(
'Portão aberto',
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 30,
color: Colors.black,
),
textAlign: TextAlign.center,
)
),
),
),
),
],
),
),
],
)
),
);
}
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;
}
}
}