在详细视图页面浏览中更改语言

问题描述

我尝试使我的应用程序适应性强。我做到了,列表视图更改了语言,但Detailpage不变。我如何重建它?来自sqlite数据库的数据。我尝试使用提供程序没有成功... 我的代码

home_page.dart:

在这里,我检查屏幕的方向和宽度(仅用于测试700)并构建主屏幕。

import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/home_screen_list.dart';
import 'package:flut_bount/user.dart';
import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';

PageController pageController;

var isLargeScreen = false;
List<User> users;

class HomePage extends StatefulWidget {
  @override
  _HomePagePageState createState() => _HomePagePageState();
}

class _HomePagePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
  }

  int actualPage = 0;

  @override
  Widget build(BuildContext context) {
    Widget _widget;

    return
/*      Provider<MyModel>(
      create: (_) => MyModel(),child: */
        Scaffold(
      body: OrientationBuilder(
        builder: (context,orientation) {
          if (MediaQuery.of(context).size.shortestSide > 700 &&
              MediaQuery.of(context).orientation == Orientation.landscape) {
            isLargeScreen = true;
          } else {
            isLargeScreen = false;
          }

          return Row(
            children: <Widget>[
              Expanded(
                flex: 1,child: MyHomeScreenList(),),isLargeScreen
                  ? Expanded(
                      flex: 2,child: FutureBuilder(
                        future: DatabaseHelper.getUsers(),builder:
                            (context,AsyncSnapshot<List<dynamic>> snapshot) {
                          Widget _widget;

                          if (snapshot.hasData) {
                            users = snapshot.data;
                            /*  final model =
                                Provider.of<MyModel>(context,listen: false);
                              MyModel().users = users;*/
                            _widget = DetailedView(users,0);
                          } else if (snapshot.hasError) {
                            _widget =
                                Center(child: Text('Something went wrong'));
                          } else {
                            _widget =
                                Center(child: CircularProgressIndicator());
                          }
                          return _widget;
                        },)
                  : Container(),],);
        },);
  }
}

class MyModel with ChangeNotifier {
  List<User> _users;
  List<User> get users => _users;

  set users(value) {
    _users = value;
    notifyListeners();
  }
}

home_screen_list.dart

这是列表视图生成器,平板电脑1/3宽度,右侧为detailview

import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/drawer.dart';
import 'package:flut_bount/home_page.dart';
import 'package:Flutter/material.dart';

class MyHomeScreenList extends StatefulWidget {
  @override
  _MyHomeScreenListState createState() => _MyHomeScreenListState();
}

class _MyHomeScreenListState extends State<MyHomeScreenList> {
  Widget _widget;
  Color _iconColor = Colors.black;
  var data;
  void _buildWidgets() {
    Widget _temp = FutureBuilder(
      future: DatabaseHelper.getUsers(),builder: (BuildContext context,AsyncSnapshot<List<dynamic>> snapshot) {
        Widget _widget;

        if (snapshot.hasData) {
          data = snapshot.data;

          _widget = ListView.builder(
            itemCount: data.length,itemBuilder: (_,int index) {
              return ListTile(
                leading: Text(data[index].id.toString()),title: Text(data[index].names),subtitle: data[index].jobtitle != null
                    ? Text(data[index].jobtitle)
                    : null,onTap: () {
                  isLargeScreen
                      ? pageController.animatetoPage(index,duration: Duration(seconds: 1),curve: Curves.eaSEOut)
                      : Navigator.push(
                          context,MaterialPageRoute(
                              builder: (_) => DetailedView(data,index)));
                },);
            },);
        } else if (snapshot.hasError) {
          _widget = Center(child: Text('Something went wrong'));
        } else {
          _widget = Center(child: CircularProgressIndicator());
        }
        return _widget;
      },);

    setState(() => _widget = _temp);
  }

  @override
  void initState() {
    super.initState();
    initDb();
  }

  void initDb() async {
    await DatabaseHelper.initDatabase();

    _buildWidgets();
    String name = DatabaseHelper.getTable();
    print('table Name :$name');
    Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
    setState(() {
      _iconColor = _temp;
    });
  }

  changeTableName() async {
    await DatabaseHelper.changeTable();
    String name = DatabaseHelper.getTable();
    print('table Name is :$name');
    Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
    setState(() {
      _iconColor = _temp;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: MyDrawer(),appBar: AppBar(
        title: Text('My App'),actions: <Widget>[
          IconButton(
            icon: Icon(Icons.language),color: _iconColor,onpressed: () {
              setState(
                  () => _widget = Center(child: CircularProgressIndicator()));
              Future.delayed(Duration(seconds: 1),() {
                //          _buildWidgets();
              });
              changeTableName();
              _buildWidgets();
            },)
        ],body: Container(
        child: _widget,);
  }
}

detailed_view.dart 在这里建立综合浏览量,并希望在单击列表视图应用栏的操作图标时更改语言

import 'package:flut_bount/home_page.dart';
import 'package:Flutter/material.dart';
import 'package:flut_bount/user.dart';
import 'package:Flutter_html/Flutter_html.dart';

class DetailedView extends StatefulWidget {
  final List<User> user;
  final int index;
  DetailedView(this.user,this.index);
  @override
  DetailedViewState createState() => DetailedViewState();
}

class DetailedViewState extends State<DetailedView>
    with WidgetsBindingObserver {
  int activePageIndex;

  @override
  void initState() {
    super.initState();
    pageController = PageController(initialPage: widget.index);
    setState(() => activePageIndex = widget.index);
  }

  @override
  Widget build(BuildContext context) => Scaffold(
        // drawer: MyDrawer(),appBar: AppBar(
          title: Text('My App'),actions: <Widget>[
            IconButton(
              onpressed: () {
                if (widget.user[activePageIndex].favourite == 0 ||
                    widget.user[activePageIndex].favourite == null) {
                  setState(() => widget.user[activePageIndex].favourite = 1);
                } else {
                  setState(() => widget.user[activePageIndex].favourite = 0);
                }
              },icon: Icon(Icons.star),color: widget.user[activePageIndex].favourite == 1
                  ? Colors.yellow
                  : Colors.white,)
          ],body: PageView.builder(
          controller: pageController,itemCount: widget.user.length,int index) =>
              DetaildViewPage(user: widget.user[index]),onPageChanged: (pageIndex) {
            setState(() => activePageIndex = pageIndex);
          },);
}

class DetaildViewPage extends StatefulWidget {
  final User user;

  const DetaildViewPage({Key key,this.user}) : super(key: key);
  @override
  _DetaildViewPageState createState() => _DetaildViewPageState();
}

class _DetaildViewPageState extends State<DetaildViewPage> {
  @override
  void initState() {
    // Todo: implement initState
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: ListView(
          children: <Widget>[
            Html(
              data: widget.user.description,);
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)