Есть ли способ перестроить все приложение, включив константные виджеты в проект флаттера? - PullRequest
0 голосов
/ 23 ноября 2018

В моем проекте Flutter для повышения производительности я создал много виджетов const, эти виджеты не будут перестраиваться при перестройке их родительских виджетов.

Но после того, как пользователь изменит язык приложения, мне нужно перестроитьвсе приложение, чтобы применить изменения текста.

Есть ли способ заставить приложение полностью перестроить?Спасибо, любые советы будут оценены.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

'Inheritedwidget` - это решение для перерисовки любого виджета при изменении переданного значения.Даже виджеты без сохранения состояния и константы.

Например, для переводов flutter уже предоставляет InheritedWidget, который можно привязать к использованию Localizations.of method

0 голосов
/ 23 ноября 2018

да, есть способ сделать это.Вы должны сделать полный перезапуск (теперь он называется «Горячий перезапуск») в коде, способ сделать это - поместить ваше приложение в статический виджет (почему статический? потому что он будет создан один раз, чтобы избежать нуля или чего-то подобноготот).и когда вы хотите сделать полный перезапуск, просто выполните горячую перезагрузку в этом виджете, после чего он перезапустит ваше приложение.Вы можете использовать его повсюду

вот так:

1 - сначала в main.dart, поместите ваше приложение в виджет Restart:

import 'package:flutter/material.dart';
import 'home.dart';

void main() {
  runApp(new HotRestartController(
    child: new MyApp()
  ));
}

2- напишите ваш hotRestartController внутри файла:

class HotRestartController extends StatefulWidget {
  final Widget child;

  HotRestartController({this.child});

  static performHotRestart(BuildContext context) {
    final _HotRestartControllerState state = context.ancestorStateOfType(const TypeMatcher<_HotRestartControllerState>());
    state.performHotRestart();
  }

  @override
  _HotRestartControllerState createState() => new _HotRestartControllerState();
}

class _HotRestartControllerState extends State<HotRestartController> {
  Key key = new UniqueKey();

  void performHotRestart() {
    this.setState(() {
      key = new UniqueKey();
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Container(
      key: key,
      child: widget.child,
    );
  }
}

3 - в любое время, в любое место, куда вы можете импортировать main.dart, и вызывайте "executeHotRestart", используя:

HotRestartController.restartApp(context)

веселиться!

...