#flutter #dart
#трепетание #дротик
Вопрос:
Я довольно новичок в flutter и dart, я настроил свое приложение следующим образом:
class MyExpensesApp extends StatefulWidget {
const MyExpensesApp({Key? key}) : super(key: key);
@override
State<MyExpensesApp> createState() => _MyExpensesAppState();
}
class _MyExpensesAppState extends State<MyExpensesApp> {
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'title',
home: Directionality(
textDirection: TextDirection.rtl,
child: HomePage(),
),
);
}
}
и у меня есть кнопка FloatingAction внутри HomePage
, которая при нажатии переходит на другую страницу
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
....
),
floatingActionButton: FloatingActionButton(
onPressed: () => {
Navigator.push(
context, MaterialPageRoute(builder: (context) => ExpensePage()))
},
tooltip: "add expense",
child: Icon(Icons.add),
),
);
}
}
но при навигации по ExpensePage
экрану это не RTL, что означает, что он не является дочерним элементом виджета Directionality?
Я просто заменяю все MaterialApp на ExpensePage
?
Как я могу заменить дочерний элемент Directionality только при навигации?
Мне не нужна какая-либо сложная маршрутизация, поскольку у меня есть только эти 2 страницы.
Ответ №1:
Чтобы разместить виджет направленности над навигатором (и, следовательно, над каждой страницей), вы можете использовать builder
свойство в MaterialApp
.
return MaterialApp(
title: 'title',
home: HomePage(),
builder: (context, child) => Directionality(
textDirection: TextDirection.rtl,
child: child!,
),
);
Комментарии:
1. Спасибо, это сработало! что делает восклицательный знак в
child!
?2. @Dimon
child
имеет значение null, но поскольку вы предоставилиhome
виджет, этот дочерний элемент будет (ненулевым) навигатором. Восклицательный знак указывает Dart, которыйchild
не равен null, поэтому его можно передать в качествеchild
параметра конструктора виджета Directionality.
Ответ №2:
Для дочерней страницы вы можете использовать Scaffold в качестве корневого родительского элемента. Затем попробуйте использовать ту же маршрутизацию.
Комментарии:
1. Метод сборки дочерней страницы «Домашняя страница» возвращает каркас .. то же самое для «ExpensePage».
2. Приложение material должно быть только на начальной странице. А для остального экрана вы можете использовать его в качестве родительского или корневого виджета