Open name27 opened 1 year ago
import 'package:dio/dio.dart';
import 'package:dog_album_app/model/dog.dart';
import 'package:dog_album_app/widget/dog_dialog.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Future<Dog?> getData() async {
var dio = Dio();
var url = 'https://dog.ceo/api/breeds/image/random';
var res = await dio.get(url);
if (res.statusCode == 200 && Dog.fromMap(res.data).status == 'success') {
return Dog.fromMap(res.data);
}
return null;
}
@override
Widget build(BuildContext context) {
var dogLength = 15;
return MaterialApp(
home: Scaffold(
extendBodyBehindAppBar: true,
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
),
body: Center(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, mainAxisSpacing: 4, crossAxisSpacing: 4),
itemBuilder: (context, index) => FutureBuilder(
future: getData(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return snapshot.data?.message == null
? SizedBox()
: GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (context) =>
DogDialog(dog: snapshot.data!));
},
child: Image.network(
snapshot.data!.message,
fit: BoxFit.cover,
));
}
return CircularProgressIndicator();
},
)),
)),
);
}
}
import 'package:dog_album_app/model/dog.dart';
import 'package:flutter/material.dart';
class DogDialog extends StatelessWidget {
const DogDialog({super.key, required this.dog});
final Dog dog;
@override
Widget build(BuildContext context) {
return Center(
child: Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
clipBehavior: Clip.antiAlias,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Image.network(dog.message),
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Close'))
],
),
),
);
}
}
main.dart
dog.dart