import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(home: MyApp(), debugShowCheckedModeBanner:
false));
}
类 MyApp 扩展 StatefulWidget {
const MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final GlobalKey<AnimatedListState> key = GlobalKey();
GlobalKey<FormState> _formkey = GlobalKey<FormState>();
List<String> _items = [];
Future<String> showInfoDialog(BuildContext) async {
return await showDialog(
context: context,
builder: (context) {
final TextEditingController _textTitleController =
TextEditingController();
final TextEditingController _textDiscriptionController =
TextEditingController();
return AlertDialog(
content: Form(
key: _formkey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextFormField(
controller: _textTitleController,
validator: (value) {
return value.isEmpty ? "Invalid Field" : null;
},
decoration:
InputDecoration(hintText: "Enter Report Title"),
),
TextFormField(
controller: _textDiscriptionController,
validator: (value) {
return value.isEmpty ? "Invalid Field" : null;
},
decoration:
InputDecoration(hintText: "Enter Report
Discrption"),
)
],
)),
actions: <Widget>[
TextButton(
child: Text('submit'),
onPressed: () {
if (_formkey.currentState.validate()) {
Navigator.of(context)
.pop(_textTitleController.text.toString());
}
})
],
);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: Text('Alert'),
backgroundColor: Colors.red[800],
elevation: 2,
),
body: AnimatedList(
key: key,
initialItemCount: _items.length,
itemBuilder: (context, index, animation) {
return _buildItem(
_items[index],
animation,
index,
);
},
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () async {
await showInfoDialog(context).then((value) {
int i = _items.length > 0 ? _items.length : 0;
_items.insert(i, value);
key.currentState.insertItem(i);
});
},
),
));
}
Widget _buildItem(String items, Animation animation, int index) {
return SizeTransition(
sizeFactor: animation,
child: Card(
elevation: 2,
child: ListTile(
title: Text(
items,
style: TextStyle(fontWeight: FontWeight.w600),
),
subtitle: Text("crush report in the main road"),
leading: const Icon(
Icons.warning_rounded,
color: Colors.red,
size: 30,
),
// CircleAvatar(
// backgroundColor: Colors.red,
// ),
trailing: IconButton(
icon: Icon(
Icons.close,
color: Colors.redAccent,
),
onPressed: () {
_removeItem(index);
},
),
),
),
);
}
void _removeItem(int i) {
String removedItem = _items.removeAt(i);
AnimatedListRemovedItemBuilder builder = (
context,
animation,
) {
return _buildItem(removedItem, animation, i);
};
key.currentState.removeItem(i, builder);
}
}