Горячий перезапуск приложения flutter одним нажатием кнопки

#flutter #dart

Вопрос:

Я разработал игру. теперь, когда я нажимаю кнопку с повышением.. Я хочу, чтобы моя игра возобновилась. Как я могу сделать это в мгновение ока??

 import 'dart:math';
import 'package:flutter/material.dart';
void main() {
  runApp(const GameUI());
}

class GameUI extends StatefulWidget {
  const GameUI({Key? key}) : super(key: key);
  @override
  _GameUIState createState() => _GameUIState();
}

class _GameUIState extends State<GameUI> {
@override
 Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Center(child: Text('Block Memory Game')),
        ),
        body: Stack(children: [

/*   Here is the whole game code 
 Here whole game is in the stack  And this last Align contains restart button */

          Align(
            alignment: Alignment.bottomCenter,
            child: ElevatedButton(
              onPressed: (){
                //what code to write here to restart the application
              },
                child:
                const Text('Restart Game')
            ),
          )
        ]),
      ),
    );
  }
 

Когда мы нажимаем кнопку hotRestart, приложение запускается так же, как я хочу, чтобы это происходило, когда я нажимаю на Restart Game кнопку

Ответ №1:

Оберните свое приложение StatefulWidget , а затем дайте ему ключ после этого, когда вы обновляете ключ, приложение перезапускается, как указано ниже в restartGame() функции. Также вы можете получить доступ к этой функции из любого места с помощью этой строки:

Game.restartGame(context)

 class game extends State<Game> {
  Key key = UniqueKey();

  void restartGame() {
    setState(() {
      key = UniqueKey();
    });
  }
        
  @override
  Widget build(BuildContext context) {
    return KeyedSubtree(
      key: key,
      child: Game(),
    );
  }
}
 

Комментарии:

1. Разве подчеркивание имени класса class _game не является плохой практикой? Это создает частные переменные и методы класса, но не должно использоваться для класса. Или я ошибаюсь?

2. Спасибо Вам за ответ. Можете ли вы разъяснить мне ответ, поскольку я не перезапускаю приложение, это просто горячая перезагрузка. Я хочу менять значения игры при каждом перезапуске. код, который вы предоставили, просто позволяет мне запустить один и тот же экземпляр игры с первого раза. помоги мне с этим, пока я здесь застрял. и даже Game.restartGame(context) выдает мне ошибку. Если вам нужны какие-то данные об игре, я их предоставлю.

3. @Tanguy Да, вы правы, я просто устанавливал имя.