Hi Guy’s This is a fun article on How to create an unclickable button that keeps moving when you hover on it, until the form text Field is not valid.
main.dart
import 'package:flutter/material.dart'; import 'package:waste_button/onHover.dart'; import 'package:velocity_x/velocity_x.dart'; import 'package:fluttertoast/fluttertoast.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Moving Button if Form InValid', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key}) : super(key: key); @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { TextEditingController emailController = TextEditingController(); TextEditingController passwordController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ TextField( controller: emailController, keyboardType: TextInputType.text, decoration: InputDecoration( filled: true, fillColor: Colors.white, hintText: "Email", border: OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10.0)))), ).p4().px24(), TextField( controller: passwordController, keyboardType: TextInputType.text, decoration: InputDecoration( filled: true, fillColor: Colors.white, hintText: "Password", border: OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10.0)))), ).p4().px24(), OnHover(builder: (isHovered){ return ElevatedButton(onPressed: (){ print('Clicked'); Fluttertoast.showToast( msg: "Form Submited Successfully", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.red, textColor: Colors.white, fontSize: 16.0 ); }, child: Text("Sign-In")); }), ], ), ), ); } }
onHover.dart
import 'package:flutter/material.dart'; class OnHover extends StatefulWidget { final Widget Function(bool iaHovered) builder; const OnHover({Key? key, required this.builder}) : super(key: key); @override _OnHoverState createState() => _OnHoverState(); } class _OnHoverState extends State<OnHover> { bool isHovered = false; @override Widget build(BuildContext context) { final hovered = Matrix4.identity()..translate(130,0,130); final transform = isHovered ? hovered : Matrix4.identity(); return MouseRegion( onEnter: (_)=> onEntered(true), onExit: (_)=> onEntered(false), child: AnimatedContainer( duration: Duration(milliseconds: 150), transform: transform, child: widget.builder(isHovered), ), ); } void onEntered(bool isHovered){ setState(() { this.isHovered = isHovered; }); } }