2022-04-24|閱讀時間 ‧ 約 7 分鐘

Flutter Web image hover zoom(實現圖片懸浮縮放)

Implement Picture zoom when hover the image.
鼠標懸浮縮放
鼠標懸浮縮放
How to implement it?
Using AnimatedContainer to do animation and using InkWell to detect hover.
In InkWell:
InkWell(
       onTap: () {
         print('Tap');
       },
       // Detect hover here
       onHover: (val) {
         setState(() {
           isHover = val;
           print(val);
         });
       },
       child: //Child
)
In AnimatedContainer:
AnimatedContainer(
           transform: isHover ? hoverdTransform : unhoverdTransform,
           // duraction time
           duration: const Duration(seconds: 10),
           curve: Curves.ease,
           child: Image.network(
             imageUrl,
             fit: BoxFit.cover,
             height: 200,
           ),
         ),
Full Code:
import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';

void main() {
 runApp(
   MaterialApp(
     home: Home(),
   ),
 );
}

class Home extends StatefulWidget {
 @override
 _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
 @override
 Widget build(BuildContext context) {
   return Scaffold(
     body: ZoomAnimate(),
   );
 }
}

class ZoomAnimate extends StatefulWidget {
 const ZoomAnimate({Key? key}) : super(key: key);

 @override
 State<ZoomAnimate> createState() => _ZoomAnimateState();
}

class _ZoomAnimateState extends State<ZoomAnimate> {
 bool isHover = false;
 String imageUrl =
     "https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Ash_Tree_-_geograph.org.uk_-_590710.jpg/220px-Ash_Tree_-_geograph.org.uk_-_590710.jpg";

 @override
 Widget build(BuildContext context) {
   final hoverdTransform = Matrix4.identity()..scale(1.2);
   final unhoverdTransform = Matrix4.identity()..scale(1);
   return Padding(
     padding: const EdgeInsets.all(8.0),
     child: InkWell(
       onTap: () {
         print('Tap');
       },
       onHover: (val) {
         setState(() {
           isHover = val;
           print(val);
         });
       },
       child: ClipRRect(
         borderRadius: BorderRadius.circular(8.0),
         child: AnimatedContainer(
           transform: isHover ? hoverdTransform : unhoverdTransform,
           duration: const Duration(seconds: 10),
           curve: Curves.ease,
           child: Image.network(
             imageUrl,
             fit: BoxFit.cover,
             height: 200,
           ),
         ),
       ),
     ),
   );
 }
}

歡迎大家來我的Blog看:
1.Blog: 文章連結
2.Medium: 文章連結
分享至
成為作者繼續創作的動力吧!
樂愛學習,探索未知領域。目前在專研react、flutter和區塊鍊
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.