Quantcast
Channel: Active questions tagged onhover - Stack Overflow
Viewing all articles
Browse latest Browse all 50

How do I make the NavRail expand onHover in this Flutter project?

$
0
0

I am trying to make a username generator (using flutter's own codelab) and while I was doing that I wanted to change something. I wanted to make the nav rail expand whenever I hovered on it but it is not working. Here is my code:

import 'package:english_words/english_words.dart';import 'package:flutter/material.dart';import 'package:provider/provider.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  const MyApp({super.key});  @override  Widget build(BuildContext context) {    return ChangeNotifierProvider(      create: (context) => MyAppState(),      child: MaterialApp(        title: 'Namer App',        theme: ThemeData(          useMaterial3: true,          colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),        ),        home: MyHomePage(),      ),    );  }}class MyAppState extends ChangeNotifier {  var current = WordPair.random();  void getNext() {    current = WordPair.random();    notifyListeners();  }  var favorites = <WordPair>[];  void toggleFavorite() {    if (favorites.contains(current)) {      favorites.remove(current);    } else {      favorites.add(current);    }    notifyListeners();  }}class MyHomePage extends StatefulWidget {  @override  State<MyHomePage> createState() => _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> {  var selectedIndex = 0;  @override  Widget build(BuildContext context) {    Widget page;    switch (selectedIndex) {      case 0:        page = GeneratorPage();        break;      case 1:        page = Placeholder();        break;      default:        throw UnimplementedError('no widget for $selectedIndex');    }    return LayoutBuilder(builder: (context, constraints) {      return Scaffold(        body: Row(          children: [            SafeArea(              child: NavigationRail(                extended: constraints.maxWidth >= 600,                destinations: [                  NavigationRailDestination(                    icon: Icon(Icons.home),                    label: Text('Home'),                  ),                  NavigationRailDestination(                    icon: Icon(Icons.favorite),                    label: Text('Favorites'),                  ),                  NavigationRailDestination(                    icon: Icon(Icons.person),                    label: Text('Profile'),                  ),                ],                selectedIndex: selectedIndex,                onDestinationSelected: (value) {                  setState(() {                    selectedIndex = value;                  });                },              ),            ),            Expanded(              child: Container(                color: Theme.of(context).colorScheme.primaryContainer,                child: page,              ),            ),          ],        ),      );    });  }}class GeneratorPage extends StatelessWidget {  @override  Widget build(BuildContext context) {    var appState = context.watch<MyAppState>();    var pair = appState.current;    IconData icon;    if (appState.favorites.contains(pair)) {      icon = Icons.favorite;    } else {      icon = Icons.favorite_border;    }    return Center(      child: Column(        mainAxisAlignment: MainAxisAlignment.center,        children: [          BigCard(pair: pair),          SizedBox(height: 10),          Row(            mainAxisSize: MainAxisSize.min,            children: [              ElevatedButton.icon(                onPressed: () {                  appState.toggleFavorite();                },                icon: Icon(icon),                label: Text('Like'),              ),              SizedBox(width: 10),              ElevatedButton(                onPressed: () {                  appState.getNext();                },                child: Text('Next'),              ),            ],          ),        ],      ),    );  }}class BigCard extends StatelessWidget {  const BigCard({    super.key,    required this.pair,  });  final WordPair pair;  @override  Widget build(BuildContext context) {    var theme = Theme.of(context);    var style = theme.textTheme.displayMedium!.copyWith(      color: theme.colorScheme.onPrimary,    );    return Card(      color: theme.colorScheme.primary,      child: Padding(        padding: const EdgeInsets.all(20),        child: Text(          pair.asLowerCase,          style: style,          semanticsLabel: "${pair.first} ${pair.second}",        ),      ),    );  }}

I dont' really know what to do since I am knew to Flutter (and Dart). Here is the codelab I have been using: Flutter Codelab. I tried looking throught the flutter documentation but I couldn't find anything that would help me: Flutter Documenation


Viewing all articles
Browse latest Browse all 50

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>