下面是一個簡單的螢屏,有三個按鈕,有不同顏色的主題,我想要的是當任何一個按鈕被按下時,細節螢屏應該使用該主題。
另外,我不需要改變MaterialAppWidget的主題,因為它已經在其他地方使用了,只是這個細節螢屏需要根據它所打開的按鈕來設定主題。
import 'package:flutter/material.dart';
main() => runApp(const App())。
class App extends StatelessWidget{
const App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MaterialApp(
首頁。const HomeScreen()。
主題。ThemeData()
primaryColor: Colors.orange,
colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.orange)。
),
);
}
class HomeScreen extends StatelessWidget{
const HomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: 中心()
孩子。Wrap(
間隔。20。
方向。Axis.vertical,
兒童。const [
ThemedButton(
materialColor: Colors.red,
),
ThemedButton(
materialColor: Colors.green,
),
主題按鈕(ThemedButton)
materialColor: Colors.brown,
),
],
),
),
);
}
}
class ThemedButton extends StatelessWidget{
final MaterialColor materialColor;
const ThemedButton({
key? key。
required this.materialColor,
}) : super(key: 關鍵)。
@override
Widget build(BuildContext context) {
return Theme(
資料。Theme.of(context).copyWith(
primaryColor: materialColor,
colorScheme: ColorScheme.fromSwatch(primarySwatch: materialColor)。
),
孩子。提升的按鈕(
onPressed: () {
Navigator.push(
背景關系。
MaterialPageRoute(
builder: (context) => const DetailScreen(),
),
);
},
孩子。const Text('Go to Detail Screen')。
),
);
}
}
class DetailScreen extends StatelessWidget{
const DetailScreen({Key? key}) : super(key: key)。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
);
}
uj5u.com熱心網友回復:
像這樣的東西對你有用嗎?
class ThemedButton extends StatelessWidget{
final MaterialColor materialColor;
const ThemedButton({Key? key, required this.materialColor}) : super(key: 關鍵)。
Widget build(BuildContext context) {
return ElevatedButton(
樣式。ElevatedButton.styleFrom(
primary: materialColor
),
onPressed: () {
Navigator.push(
背景關系。
MaterialPageRoute(
builder: (context) => Theme(
資料。Theme.of(context).copyWith(
primaryColor: materialColor,
colorScheme: ColorScheme.fromSwatch(primarySwatch: materialColor)。
),
孩子。const DetailScreen()
)
),
);
},
孩子。const Text('Go to Detail Screen')。
);
}
我在一個Builder Widget中包裝了Elevated Button,以使用新的BuildContext主題來傳遞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332606.html
標籤:
